Lines Matching refs:mdev

45 void mxr_get_mbus_fmt(struct mxr_device *mdev,  in mxr_get_mbus_fmt()  argument
51 mutex_lock(&mdev->mutex); in mxr_get_mbus_fmt()
52 sd = to_outsd(mdev); in mxr_get_mbus_fmt()
55 mutex_unlock(&mdev->mutex); in mxr_get_mbus_fmt()
58 void mxr_streamer_get(struct mxr_device *mdev) in mxr_streamer_get() argument
60 mutex_lock(&mdev->mutex); in mxr_streamer_get()
61 ++mdev->n_streamer; in mxr_streamer_get()
62 mxr_dbg(mdev, "%s(%d)\n", __func__, mdev->n_streamer); in mxr_streamer_get()
63 if (mdev->n_streamer == 1) { in mxr_streamer_get()
64 struct v4l2_subdev *sd = to_outsd(mdev); in mxr_streamer_get()
66 struct mxr_resources *res = &mdev->res; in mxr_streamer_get()
69 if (to_output(mdev)->cookie == 0) in mxr_streamer_get()
73 mxr_reg_s_output(mdev, to_output(mdev)->cookie); in mxr_streamer_get()
80 mxr_reg_set_mbus_fmt(mdev, &mbus_fmt); in mxr_streamer_get()
81 mxr_reg_streamon(mdev); in mxr_streamer_get()
82 ret = mxr_reg_wait4vsync(mdev); in mxr_streamer_get()
85 mutex_unlock(&mdev->mutex); in mxr_streamer_get()
86 mxr_reg_dump(mdev); in mxr_streamer_get()
90 void mxr_streamer_put(struct mxr_device *mdev) in mxr_streamer_put() argument
92 mutex_lock(&mdev->mutex); in mxr_streamer_put()
93 --mdev->n_streamer; in mxr_streamer_put()
94 mxr_dbg(mdev, "%s(%d)\n", __func__, mdev->n_streamer); in mxr_streamer_put()
95 if (mdev->n_streamer == 0) { in mxr_streamer_put()
97 struct v4l2_subdev *sd = to_outsd(mdev); in mxr_streamer_put()
99 mxr_reg_streamoff(mdev); in mxr_streamer_put()
101 ret = mxr_reg_wait4vsync(mdev); in mxr_streamer_put()
106 WARN(mdev->n_streamer < 0, "negative number of streamers (%d)\n", in mxr_streamer_put()
107 mdev->n_streamer); in mxr_streamer_put()
108 mutex_unlock(&mdev->mutex); in mxr_streamer_put()
109 mxr_reg_dump(mdev); in mxr_streamer_put()
112 void mxr_output_get(struct mxr_device *mdev) in mxr_output_get() argument
114 mutex_lock(&mdev->mutex); in mxr_output_get()
115 ++mdev->n_output; in mxr_output_get()
116 mxr_dbg(mdev, "%s(%d)\n", __func__, mdev->n_output); in mxr_output_get()
118 if (mdev->n_output == 1) in mxr_output_get()
119 v4l2_subdev_call(to_outsd(mdev), core, s_power, 1); in mxr_output_get()
120 mutex_unlock(&mdev->mutex); in mxr_output_get()
123 void mxr_output_put(struct mxr_device *mdev) in mxr_output_put() argument
125 mutex_lock(&mdev->mutex); in mxr_output_put()
126 --mdev->n_output; in mxr_output_put()
127 mxr_dbg(mdev, "%s(%d)\n", __func__, mdev->n_output); in mxr_output_put()
129 if (mdev->n_output == 0) in mxr_output_put()
130 v4l2_subdev_call(to_outsd(mdev), core, s_power, 0); in mxr_output_put()
131 WARN(mdev->n_output < 0, "negative number of output users (%d)\n", in mxr_output_put()
132 mdev->n_output); in mxr_output_put()
133 mutex_unlock(&mdev->mutex); in mxr_output_put()
136 int mxr_power_get(struct mxr_device *mdev) in mxr_power_get() argument
138 int ret = pm_runtime_get_sync(mdev->dev); in mxr_power_get()
147 void mxr_power_put(struct mxr_device *mdev) in mxr_power_put() argument
149 pm_runtime_put_sync(mdev->dev); in mxr_power_put()
154 static int mxr_acquire_plat_resources(struct mxr_device *mdev, in mxr_acquire_plat_resources() argument
162 mxr_err(mdev, "get memory resource failed.\n"); in mxr_acquire_plat_resources()
167 mdev->res.mxr_regs = ioremap(res->start, resource_size(res)); in mxr_acquire_plat_resources()
168 if (mdev->res.mxr_regs == NULL) { in mxr_acquire_plat_resources()
169 mxr_err(mdev, "register mapping failed.\n"); in mxr_acquire_plat_resources()
176 mxr_err(mdev, "get memory resource failed.\n"); in mxr_acquire_plat_resources()
181 mdev->res.vp_regs = ioremap(res->start, resource_size(res)); in mxr_acquire_plat_resources()
182 if (mdev->res.vp_regs == NULL) { in mxr_acquire_plat_resources()
183 mxr_err(mdev, "register mapping failed.\n"); in mxr_acquire_plat_resources()
190 mxr_err(mdev, "get interrupt resource failed.\n"); in mxr_acquire_plat_resources()
195 ret = request_irq(res->start, mxr_irq_handler, 0, "s5p-mixer", mdev); in mxr_acquire_plat_resources()
197 mxr_err(mdev, "request interrupt failed.\n"); in mxr_acquire_plat_resources()
200 mdev->res.irq = res->start; in mxr_acquire_plat_resources()
205 iounmap(mdev->res.vp_regs); in mxr_acquire_plat_resources()
208 iounmap(mdev->res.mxr_regs); in mxr_acquire_plat_resources()
223 static void mxr_release_plat_resources(struct mxr_device *mdev) in mxr_release_plat_resources() argument
225 free_irq(mdev->res.irq, mdev); in mxr_release_plat_resources()
226 iounmap(mdev->res.vp_regs); in mxr_release_plat_resources()
227 iounmap(mdev->res.mxr_regs); in mxr_release_plat_resources()
230 static void mxr_release_clocks(struct mxr_device *mdev) in mxr_release_clocks() argument
232 struct mxr_resources *res = &mdev->res; in mxr_release_clocks()
246 static int mxr_acquire_clocks(struct mxr_device *mdev) in mxr_acquire_clocks() argument
248 struct mxr_resources *res = &mdev->res; in mxr_acquire_clocks()
249 struct device *dev = mdev->dev; in mxr_acquire_clocks()
255 mxr_err(mdev, "failed to get clock 'mixer'\n"); in mxr_acquire_clocks()
260 mxr_err(mdev, "failed to get clock 'vp'\n"); in mxr_acquire_clocks()
265 mxr_err(mdev, "failed to get clock 'sclk_mixer'\n"); in mxr_acquire_clocks()
270 mxr_err(mdev, "failed to get clock 'sclk_hdmi'\n"); in mxr_acquire_clocks()
275 mxr_err(mdev, "failed to get clock 'sclk_dac'\n"); in mxr_acquire_clocks()
281 mxr_release_clocks(mdev); in mxr_acquire_clocks()
285 static int mxr_acquire_resources(struct mxr_device *mdev, in mxr_acquire_resources() argument
289 ret = mxr_acquire_plat_resources(mdev, pdev); in mxr_acquire_resources()
294 ret = mxr_acquire_clocks(mdev); in mxr_acquire_resources()
298 mxr_info(mdev, "resources acquired\n"); in mxr_acquire_resources()
302 mxr_release_plat_resources(mdev); in mxr_acquire_resources()
304 mxr_err(mdev, "resources acquire failed\n"); in mxr_acquire_resources()
308 static void mxr_release_resources(struct mxr_device *mdev) in mxr_release_resources() argument
310 mxr_release_clocks(mdev); in mxr_release_resources()
311 mxr_release_plat_resources(mdev); in mxr_release_resources()
312 memset(&mdev->res, 0, sizeof(mdev->res)); in mxr_release_resources()
313 mxr_resource_clear_clocks(&mdev->res); in mxr_release_resources()
316 static void mxr_release_layers(struct mxr_device *mdev) in mxr_release_layers() argument
320 for (i = 0; i < ARRAY_SIZE(mdev->layer); ++i) in mxr_release_layers()
321 if (mdev->layer[i]) in mxr_release_layers()
322 mxr_layer_release(mdev->layer[i]); in mxr_release_layers()
325 static int mxr_acquire_layers(struct mxr_device *mdev, in mxr_acquire_layers() argument
328 mdev->layer[0] = mxr_graph_layer_create(mdev, 0); in mxr_acquire_layers()
329 mdev->layer[1] = mxr_graph_layer_create(mdev, 1); in mxr_acquire_layers()
330 mdev->layer[2] = mxr_vp_layer_create(mdev, 0); in mxr_acquire_layers()
332 if (!mdev->layer[0] || !mdev->layer[1] || !mdev->layer[2]) { in mxr_acquire_layers()
333 mxr_err(mdev, "failed to acquire layers\n"); in mxr_acquire_layers()
340 mxr_release_layers(mdev); in mxr_acquire_layers()
348 struct mxr_device *mdev = to_mdev(dev); in mxr_runtime_resume() local
349 struct mxr_resources *res = &mdev->res; in mxr_runtime_resume()
352 mxr_dbg(mdev, "resume - start\n"); in mxr_runtime_resume()
353 mutex_lock(&mdev->mutex); in mxr_runtime_resume()
357 dev_err(mdev->dev, "clk_prepare_enable(mixer) failed\n"); in mxr_runtime_resume()
362 dev_err(mdev->dev, "clk_prepare_enable(vp) failed\n"); in mxr_runtime_resume()
367 dev_err(mdev->dev, "clk_prepare_enable(sclk_mixer) failed\n"); in mxr_runtime_resume()
371 mxr_reg_reset(mdev); in mxr_runtime_resume()
372 mxr_dbg(mdev, "resume - finished\n"); in mxr_runtime_resume()
374 mutex_unlock(&mdev->mutex); in mxr_runtime_resume()
382 mutex_unlock(&mdev->mutex); in mxr_runtime_resume()
383 dev_err(mdev->dev, "resume failed\n"); in mxr_runtime_resume()
389 struct mxr_device *mdev = to_mdev(dev); in mxr_runtime_suspend() local
390 struct mxr_resources *res = &mdev->res; in mxr_runtime_suspend()
391 mxr_dbg(mdev, "suspend - start\n"); in mxr_runtime_suspend()
392 mutex_lock(&mdev->mutex); in mxr_runtime_suspend()
397 mutex_unlock(&mdev->mutex); in mxr_runtime_suspend()
398 mxr_dbg(mdev, "suspend - finished\n"); in mxr_runtime_suspend()
413 struct mxr_device *mdev; in mxr_probe() local
419 mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); in mxr_probe()
420 if (!mdev) { in mxr_probe()
427 mdev->dev = dev; in mxr_probe()
429 mutex_init(&mdev->mutex); in mxr_probe()
430 spin_lock_init(&mdev->reg_slock); in mxr_probe()
431 init_waitqueue_head(&mdev->event_queue); in mxr_probe()
434 ret = mxr_acquire_resources(mdev, pdev); in mxr_probe()
439 ret = mxr_acquire_video(mdev, mxr_output_conf, in mxr_probe()
445 ret = mxr_acquire_layers(mdev, pdata); in mxr_probe()
451 mxr_info(mdev, "probe successful\n"); in mxr_probe()
455 mxr_release_video(mdev); in mxr_probe()
458 mxr_release_resources(mdev); in mxr_probe()
461 kfree(mdev); in mxr_probe()
471 struct mxr_device *mdev = to_mdev(dev); in mxr_remove() local
475 mxr_release_layers(mdev); in mxr_remove()
476 mxr_release_video(mdev); in mxr_remove()
477 mxr_release_resources(mdev); in mxr_remove()
479 kfree(mdev); in mxr_remove()