Lines Matching refs:mdev
45 void mxr_get_mbus_fmt(struct mxr_device *mdev, in mxr_get_mbus_fmt() argument
54 mutex_lock(&mdev->mutex); in mxr_get_mbus_fmt()
55 sd = to_outsd(mdev); in mxr_get_mbus_fmt()
59 mutex_unlock(&mdev->mutex); in mxr_get_mbus_fmt()
62 void mxr_streamer_get(struct mxr_device *mdev) in mxr_streamer_get() argument
64 mutex_lock(&mdev->mutex); in mxr_streamer_get()
65 ++mdev->n_streamer; in mxr_streamer_get()
66 mxr_dbg(mdev, "%s(%d)\n", __func__, mdev->n_streamer); in mxr_streamer_get()
67 if (mdev->n_streamer == 1) { in mxr_streamer_get()
68 struct v4l2_subdev *sd = to_outsd(mdev); in mxr_streamer_get()
73 struct mxr_resources *res = &mdev->res; in mxr_streamer_get()
76 if (to_output(mdev)->cookie == 0) in mxr_streamer_get()
80 mxr_reg_s_output(mdev, to_output(mdev)->cookie); in mxr_streamer_get()
87 mxr_reg_set_mbus_fmt(mdev, mbus_fmt); in mxr_streamer_get()
88 mxr_reg_streamon(mdev); in mxr_streamer_get()
89 ret = mxr_reg_wait4vsync(mdev); in mxr_streamer_get()
92 mutex_unlock(&mdev->mutex); in mxr_streamer_get()
93 mxr_reg_dump(mdev); in mxr_streamer_get()
97 void mxr_streamer_put(struct mxr_device *mdev) in mxr_streamer_put() argument
99 mutex_lock(&mdev->mutex); in mxr_streamer_put()
100 --mdev->n_streamer; in mxr_streamer_put()
101 mxr_dbg(mdev, "%s(%d)\n", __func__, mdev->n_streamer); in mxr_streamer_put()
102 if (mdev->n_streamer == 0) { in mxr_streamer_put()
104 struct v4l2_subdev *sd = to_outsd(mdev); in mxr_streamer_put()
106 mxr_reg_streamoff(mdev); in mxr_streamer_put()
108 ret = mxr_reg_wait4vsync(mdev); in mxr_streamer_put()
113 WARN(mdev->n_streamer < 0, "negative number of streamers (%d)\n", in mxr_streamer_put()
114 mdev->n_streamer); in mxr_streamer_put()
115 mutex_unlock(&mdev->mutex); in mxr_streamer_put()
116 mxr_reg_dump(mdev); in mxr_streamer_put()
119 void mxr_output_get(struct mxr_device *mdev) in mxr_output_get() argument
121 mutex_lock(&mdev->mutex); in mxr_output_get()
122 ++mdev->n_output; in mxr_output_get()
123 mxr_dbg(mdev, "%s(%d)\n", __func__, mdev->n_output); in mxr_output_get()
125 if (mdev->n_output == 1) in mxr_output_get()
126 v4l2_subdev_call(to_outsd(mdev), core, s_power, 1); in mxr_output_get()
127 mutex_unlock(&mdev->mutex); in mxr_output_get()
130 void mxr_output_put(struct mxr_device *mdev) in mxr_output_put() argument
132 mutex_lock(&mdev->mutex); in mxr_output_put()
133 --mdev->n_output; in mxr_output_put()
134 mxr_dbg(mdev, "%s(%d)\n", __func__, mdev->n_output); in mxr_output_put()
136 if (mdev->n_output == 0) in mxr_output_put()
137 v4l2_subdev_call(to_outsd(mdev), core, s_power, 0); in mxr_output_put()
138 WARN(mdev->n_output < 0, "negative number of output users (%d)\n", in mxr_output_put()
139 mdev->n_output); in mxr_output_put()
140 mutex_unlock(&mdev->mutex); in mxr_output_put()
143 int mxr_power_get(struct mxr_device *mdev) in mxr_power_get() argument
145 int ret = pm_runtime_get_sync(mdev->dev); in mxr_power_get()
154 void mxr_power_put(struct mxr_device *mdev) in mxr_power_put() argument
156 pm_runtime_put_sync(mdev->dev); in mxr_power_put()
161 static int mxr_acquire_plat_resources(struct mxr_device *mdev, in mxr_acquire_plat_resources() argument
169 mxr_err(mdev, "get memory resource failed.\n"); in mxr_acquire_plat_resources()
174 mdev->res.mxr_regs = ioremap(res->start, resource_size(res)); in mxr_acquire_plat_resources()
175 if (mdev->res.mxr_regs == NULL) { in mxr_acquire_plat_resources()
176 mxr_err(mdev, "register mapping failed.\n"); in mxr_acquire_plat_resources()
183 mxr_err(mdev, "get memory resource failed.\n"); in mxr_acquire_plat_resources()
188 mdev->res.vp_regs = ioremap(res->start, resource_size(res)); in mxr_acquire_plat_resources()
189 if (mdev->res.vp_regs == NULL) { in mxr_acquire_plat_resources()
190 mxr_err(mdev, "register mapping failed.\n"); in mxr_acquire_plat_resources()
197 mxr_err(mdev, "get interrupt resource failed.\n"); in mxr_acquire_plat_resources()
202 ret = request_irq(res->start, mxr_irq_handler, 0, "s5p-mixer", mdev); in mxr_acquire_plat_resources()
204 mxr_err(mdev, "request interrupt failed.\n"); in mxr_acquire_plat_resources()
207 mdev->res.irq = res->start; in mxr_acquire_plat_resources()
212 iounmap(mdev->res.vp_regs); in mxr_acquire_plat_resources()
215 iounmap(mdev->res.mxr_regs); in mxr_acquire_plat_resources()
230 static void mxr_release_plat_resources(struct mxr_device *mdev) in mxr_release_plat_resources() argument
232 free_irq(mdev->res.irq, mdev); in mxr_release_plat_resources()
233 iounmap(mdev->res.vp_regs); in mxr_release_plat_resources()
234 iounmap(mdev->res.mxr_regs); in mxr_release_plat_resources()
237 static void mxr_release_clocks(struct mxr_device *mdev) in mxr_release_clocks() argument
239 struct mxr_resources *res = &mdev->res; in mxr_release_clocks()
253 static int mxr_acquire_clocks(struct mxr_device *mdev) in mxr_acquire_clocks() argument
255 struct mxr_resources *res = &mdev->res; in mxr_acquire_clocks()
256 struct device *dev = mdev->dev; in mxr_acquire_clocks()
262 mxr_err(mdev, "failed to get clock 'mixer'\n"); in mxr_acquire_clocks()
267 mxr_err(mdev, "failed to get clock 'vp'\n"); in mxr_acquire_clocks()
272 mxr_err(mdev, "failed to get clock 'sclk_mixer'\n"); in mxr_acquire_clocks()
277 mxr_err(mdev, "failed to get clock 'sclk_hdmi'\n"); in mxr_acquire_clocks()
282 mxr_err(mdev, "failed to get clock 'sclk_dac'\n"); in mxr_acquire_clocks()
288 mxr_release_clocks(mdev); in mxr_acquire_clocks()
292 static int mxr_acquire_resources(struct mxr_device *mdev, in mxr_acquire_resources() argument
296 ret = mxr_acquire_plat_resources(mdev, pdev); in mxr_acquire_resources()
301 ret = mxr_acquire_clocks(mdev); in mxr_acquire_resources()
305 mxr_info(mdev, "resources acquired\n"); in mxr_acquire_resources()
309 mxr_release_plat_resources(mdev); in mxr_acquire_resources()
311 mxr_err(mdev, "resources acquire failed\n"); in mxr_acquire_resources()
315 static void mxr_release_resources(struct mxr_device *mdev) in mxr_release_resources() argument
317 mxr_release_clocks(mdev); in mxr_release_resources()
318 mxr_release_plat_resources(mdev); in mxr_release_resources()
319 memset(&mdev->res, 0, sizeof(mdev->res)); in mxr_release_resources()
320 mxr_resource_clear_clocks(&mdev->res); in mxr_release_resources()
323 static void mxr_release_layers(struct mxr_device *mdev) in mxr_release_layers() argument
327 for (i = 0; i < ARRAY_SIZE(mdev->layer); ++i) in mxr_release_layers()
328 if (mdev->layer[i]) in mxr_release_layers()
329 mxr_layer_release(mdev->layer[i]); in mxr_release_layers()
332 static int mxr_acquire_layers(struct mxr_device *mdev, in mxr_acquire_layers() argument
335 mdev->layer[0] = mxr_graph_layer_create(mdev, 0); in mxr_acquire_layers()
336 mdev->layer[1] = mxr_graph_layer_create(mdev, 1); in mxr_acquire_layers()
337 mdev->layer[2] = mxr_vp_layer_create(mdev, 0); in mxr_acquire_layers()
339 if (!mdev->layer[0] || !mdev->layer[1] || !mdev->layer[2]) { in mxr_acquire_layers()
340 mxr_err(mdev, "failed to acquire layers\n"); in mxr_acquire_layers()
347 mxr_release_layers(mdev); in mxr_acquire_layers()
355 struct mxr_device *mdev = to_mdev(dev); in mxr_runtime_resume() local
356 struct mxr_resources *res = &mdev->res; in mxr_runtime_resume()
359 mxr_dbg(mdev, "resume - start\n"); in mxr_runtime_resume()
360 mutex_lock(&mdev->mutex); in mxr_runtime_resume()
364 dev_err(mdev->dev, "clk_prepare_enable(mixer) failed\n"); in mxr_runtime_resume()
369 dev_err(mdev->dev, "clk_prepare_enable(vp) failed\n"); in mxr_runtime_resume()
374 dev_err(mdev->dev, "clk_prepare_enable(sclk_mixer) failed\n"); in mxr_runtime_resume()
378 mxr_reg_reset(mdev); in mxr_runtime_resume()
379 mxr_dbg(mdev, "resume - finished\n"); in mxr_runtime_resume()
381 mutex_unlock(&mdev->mutex); in mxr_runtime_resume()
389 mutex_unlock(&mdev->mutex); in mxr_runtime_resume()
390 dev_err(mdev->dev, "resume failed\n"); in mxr_runtime_resume()
396 struct mxr_device *mdev = to_mdev(dev); in mxr_runtime_suspend() local
397 struct mxr_resources *res = &mdev->res; in mxr_runtime_suspend()
398 mxr_dbg(mdev, "suspend - start\n"); in mxr_runtime_suspend()
399 mutex_lock(&mdev->mutex); in mxr_runtime_suspend()
404 mutex_unlock(&mdev->mutex); in mxr_runtime_suspend()
405 mxr_dbg(mdev, "suspend - finished\n"); in mxr_runtime_suspend()
420 struct mxr_device *mdev; in mxr_probe() local
426 mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); in mxr_probe()
427 if (!mdev) { in mxr_probe()
434 mdev->dev = dev; in mxr_probe()
436 mutex_init(&mdev->mutex); in mxr_probe()
437 spin_lock_init(&mdev->reg_slock); in mxr_probe()
438 init_waitqueue_head(&mdev->event_queue); in mxr_probe()
441 ret = mxr_acquire_resources(mdev, pdev); in mxr_probe()
446 ret = mxr_acquire_video(mdev, mxr_output_conf, in mxr_probe()
452 ret = mxr_acquire_layers(mdev, pdata); in mxr_probe()
458 mxr_info(mdev, "probe successful\n"); in mxr_probe()
462 mxr_release_video(mdev); in mxr_probe()
465 mxr_release_resources(mdev); in mxr_probe()
468 kfree(mdev); in mxr_probe()
478 struct mxr_device *mdev = to_mdev(dev); in mxr_remove() local
482 mxr_release_layers(mdev); in mxr_remove()
483 mxr_release_video(mdev); in mxr_remove()
484 mxr_release_resources(mdev); in mxr_remove()
486 kfree(mdev); in mxr_remove()