Lines Matching refs:dw_dev

88 	struct dw100_device		*dw_dev;  member
203 static inline u32 dw100_read(struct dw100_device *dw_dev, u32 reg) in dw100_read() argument
205 return readl(dw_dev->mmio + reg); in dw100_read()
208 static inline void dw100_write(struct dw100_device *dw_dev, u32 reg, u32 val) in dw100_write() argument
210 writel(val, dw_dev->mmio + reg); in dw100_write()
215 struct dw100_device *dw_dev = m->private; in dw100_dump_regs() local
262 dw100_read(dw_dev, dw100_regs[i].addr)); in dw100_dump_regs()
312 dma_free_coherent(&ctx->dw_dev->pdev->dev, ctx->map_size, in dw100_create_mapping()
315 ctx->map = dma_alloc_coherent(&ctx->dw_dev->pdev->dev, ctx->map_size, in dw100_create_mapping()
324 dev_dbg(&ctx->dw_dev->pdev->dev, in dw100_create_mapping()
340 dma_free_coherent(&ctx->dw_dev->pdev->dev, ctx->map_size, in dw100_destroy_mapping()
467 struct dw100_device *dw_dev = ctx->dw_dev; in dw100_buf_prepare() local
473 dev_dbg(&dw_dev->pdev->dev, "%x field isn't supported\n", in dw100_buf_prepare()
483 dev_dbg(&dw_dev->pdev->dev, in dw100_buf_prepare()
532 ret = pm_runtime_resume_and_get(&ctx->dw_dev->pdev->dev); in dw100_start_streaming()
550 pm_runtime_put_sync(&ctx->dw_dev->pdev->dev); in dw100_stop_streaming()
579 src_vq->dev = ctx->dw_dev->v4l2_dev.dev; in dw100_m2m_queue_init()
593 dst_vq->dev = ctx->dw_dev->v4l2_dev.dev; in dw100_m2m_queue_init()
600 struct dw100_device *dw_dev = video_drvdata(file); in dw100_open() local
613 ctx->dw_dev = dw_dev; in dw100_open()
640 dev_err(&ctx->dw_dev->pdev->dev, in dw100_open()
648 ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dw_dev->m2m_dev, in dw100_open()
817 dev_dbg(&ctx->dw_dev->pdev->dev, "%s queue busy\n", __func__); in dw100_s_fmt()
841 dev_dbg(&ctx->dw_dev->pdev->dev, in dw100_s_fmt()
857 dev_err(&ctx->dw_dev->pdev->dev, in dw100_s_fmt()
965 dev_dbg(&ctx->dw_dev->pdev->dev, in dw100_s_selection()
1029 dev_dbg(&ctx->dw_dev->pdev->dev, in dw100_s_selection()
1068 static void dw100_job_finish(struct dw100_device *dw_dev, bool with_error) in dw100_job_finish() argument
1074 curr_ctx = v4l2_m2m_get_curr_priv(dw_dev->m2m_dev); in dw100_job_finish()
1077 dev_err(&dw_dev->pdev->dev, in dw100_job_finish()
1093 dev_dbg(&dw_dev->pdev->dev, "Finishing transaction with%s error(s)\n", in dw100_job_finish()
1096 v4l2_m2m_job_finish(dw_dev->m2m_dev, curr_ctx->fh.m2m_ctx); in dw100_job_finish()
1099 static void dw100_hw_reset(struct dw100_device *dw_dev) in dw100_hw_reset() argument
1103 val = dw100_read(dw_dev, DW100_DEWARP_CTRL); in dw100_hw_reset()
1106 dw100_write(dw_dev, DW100_DEWARP_CTRL, val); in dw100_hw_reset()
1108 dw100_write(dw_dev, DW100_DEWARP_CTRL, val); in dw100_hw_reset()
1111 static void _dw100_hw_set_master_bus_enable(struct dw100_device *dw_dev, in _dw100_hw_set_master_bus_enable() argument
1116 dev_dbg(&dw_dev->pdev->dev, "%sable master bus\n", in _dw100_hw_set_master_bus_enable()
1119 val = dw100_read(dw_dev, DW100_BUS_CTRL); in _dw100_hw_set_master_bus_enable()
1126 dw100_write(dw_dev, DW100_BUS_CTRL, val); in _dw100_hw_set_master_bus_enable()
1129 static void dw100_hw_master_bus_enable(struct dw100_device *dw_dev) in dw100_hw_master_bus_enable() argument
1131 _dw100_hw_set_master_bus_enable(dw_dev, 1); in dw100_hw_master_bus_enable()
1134 static void dw100_hw_master_bus_disable(struct dw100_device *dw_dev) in dw100_hw_master_bus_disable() argument
1136 _dw100_hw_set_master_bus_enable(dw_dev, 0); in dw100_hw_master_bus_disable()
1139 static void dw100_hw_dewarp_start(struct dw100_device *dw_dev) in dw100_hw_dewarp_start() argument
1143 val = dw100_read(dw_dev, DW100_DEWARP_CTRL); in dw100_hw_dewarp_start()
1145 dev_dbg(&dw_dev->pdev->dev, "Starting Hardware CTRL:0x%08x\n", val); in dw100_hw_dewarp_start()
1146 dw100_write(dw_dev, DW100_DEWARP_CTRL, val | DW100_DEWARP_CTRL_START); in dw100_hw_dewarp_start()
1147 dw100_write(dw_dev, DW100_DEWARP_CTRL, val); in dw100_hw_dewarp_start()
1150 static void dw100_hw_init_ctrl(struct dw100_device *dw_dev) in dw100_hw_init_ctrl() argument
1179 dw100_write(dw_dev, DW100_DEWARP_CTRL, val); in dw100_hw_init_ctrl()
1182 static void dw100_hw_set_pixel_boundary(struct dw100_device *dw_dev) in dw100_hw_set_pixel_boundary() argument
1190 dw100_write(dw_dev, DW100_BOUNDARY_PIXEL, val); in dw100_hw_set_pixel_boundary()
1193 static void dw100_hw_set_scale(struct dw100_device *dw_dev, u8 scale) in dw100_hw_set_scale() argument
1195 dev_dbg(&dw_dev->pdev->dev, "Setting scale factor to %u\n", scale); in dw100_hw_set_scale()
1197 dw100_write(dw_dev, DW100_SCALE_FACTOR, scale); in dw100_hw_set_scale()
1200 static void dw100_hw_set_roi(struct dw100_device *dw_dev, u32 x, u32 y) in dw100_hw_set_roi() argument
1204 dev_dbg(&dw_dev->pdev->dev, "Setting ROI region to %u.%u\n", x, y); in dw100_hw_set_roi()
1208 dw100_write(dw_dev, DW100_ROI_START, val); in dw100_hw_set_roi()
1211 static void dw100_hw_set_src_crop(struct dw100_device *dw_dev, in dw100_hw_set_src_crop() argument
1220 dw100_hw_set_scale(dw_dev, src_scale); in dw100_hw_set_src_crop()
1227 dw100_hw_set_roi(dw_dev, left_scale, top_scale); in dw100_hw_set_src_crop()
1230 static void dw100_hw_set_source(struct dw100_device *dw_dev, in dw100_hw_set_source() argument
1249 dev_dbg(&dw_dev->pdev->dev, in dw100_hw_set_source()
1254 val = dw100_read(dw_dev, DW100_DEWARP_CTRL); in dw100_hw_set_source()
1259 dw100_write(dw_dev, DW100_DEWARP_CTRL, val); in dw100_hw_set_source()
1262 val = dw100_read(dw_dev, DW100_SWAP_CONTROL); in dw100_hw_set_source()
1273 dw100_write(dw_dev, DW100_SWAP_CONTROL, val); in dw100_hw_set_source()
1276 dw100_write(dw_dev, DW100_SRC_IMG_SIZE, in dw100_hw_set_source()
1279 dw100_write(dw_dev, DW100_SRC_IMG_STRIDE, stride); in dw100_hw_set_source()
1282 dw100_write(dw_dev, DW100_SRC_IMG_Y_BASE, DW100_IMG_Y_BASE(addr_y)); in dw100_hw_set_source()
1283 dw100_write(dw_dev, DW100_SRC_IMG_UV_BASE, DW100_IMG_UV_BASE(addr_uv)); in dw100_hw_set_source()
1286 static void dw100_hw_set_destination(struct dw100_device *dw_dev, in dw100_hw_set_destination() argument
1313 dev_dbg(&dw_dev->pdev->dev, in dw100_hw_set_destination()
1318 val = dw100_read(dw_dev, DW100_DEWARP_CTRL); in dw100_hw_set_destination()
1323 dw100_write(dw_dev, DW100_DEWARP_CTRL, val); in dw100_hw_set_destination()
1326 val = dw100_read(dw_dev, DW100_SWAP_CONTROL); in dw100_hw_set_destination()
1344 dw100_write(dw_dev, DW100_SWAP_CONTROL, val); in dw100_hw_set_destination()
1347 dw100_write(dw_dev, DW100_DST_IMG_SIZE, in dw100_hw_set_destination()
1349 dw100_write(dw_dev, DW100_DST_IMG_STRIDE, stride); in dw100_hw_set_destination()
1350 dw100_write(dw_dev, DW100_DST_IMG_Y_BASE, DW100_IMG_Y_BASE(addr_y)); in dw100_hw_set_destination()
1351 dw100_write(dw_dev, DW100_DST_IMG_UV_BASE, DW100_IMG_UV_BASE(addr_uv)); in dw100_hw_set_destination()
1352 dw100_write(dw_dev, DW100_DST_IMG_Y_SIZE1, DW100_DST_IMG_Y_SIZE(size_y)); in dw100_hw_set_destination()
1353 dw100_write(dw_dev, DW100_DST_IMG_UV_SIZE1, in dw100_hw_set_destination()
1357 static void dw100_hw_set_mapping(struct dw100_device *dw_dev, dma_addr_t addr, in dw100_hw_set_mapping() argument
1360 dev_dbg(&dw_dev->pdev->dev, in dw100_hw_set_mapping()
1364 dw100_write(dw_dev, DW100_MAP_LUT_ADDR, DW100_MAP_LUT_ADDR_ADDR(addr)); in dw100_hw_set_mapping()
1365 dw100_write(dw_dev, DW100_MAP_LUT_SIZE, DW100_MAP_LUT_SIZE_WIDTH(width) in dw100_hw_set_mapping()
1369 static void dw100_hw_clear_irq(struct dw100_device *dw_dev, unsigned int irq) in dw100_hw_clear_irq() argument
1371 dw100_write(dw_dev, DW100_INTERRUPT_STATUS, in dw100_hw_clear_irq()
1375 static void dw100_hw_enable_irq(struct dw100_device *dw_dev) in dw100_hw_enable_irq() argument
1377 dw100_write(dw_dev, DW100_INTERRUPT_STATUS, in dw100_hw_enable_irq()
1381 static void dw100_hw_disable_irq(struct dw100_device *dw_dev) in dw100_hw_disable_irq() argument
1383 dw100_write(dw_dev, DW100_INTERRUPT_STATUS, 0); in dw100_hw_disable_irq()
1386 static u32 dw_hw_get_pending_irqs(struct dw100_device *dw_dev) in dw_hw_get_pending_irqs() argument
1390 val = dw100_read(dw_dev, DW100_INTERRUPT_STATUS); in dw_hw_get_pending_irqs()
1397 struct dw100_device *dw_dev = dev_id; in dw100_irq_handler() local
1401 pending_irqs = dw_hw_get_pending_irqs(dw_dev); in dw100_irq_handler()
1406 dev_dbg(&dw_dev->pdev->dev, "Frame done interrupt\n"); in dw100_irq_handler()
1413 dev_err(&dw_dev->pdev->dev, "Interrupt error: %#x\n", err_irqs); in dw100_irq_handler()
1415 dw100_hw_disable_irq(dw_dev); in dw100_irq_handler()
1416 dw100_hw_master_bus_disable(dw_dev); in dw100_irq_handler()
1417 dw100_hw_clear_irq(dw_dev, pending_irqs | in dw100_irq_handler()
1420 dw100_job_finish(dw_dev, with_error); in dw100_irq_handler()
1428 struct dw100_device *dw_dev = ctx->dw_dev; in dw100_start() local
1435 dev_dbg(&ctx->dw_dev->pdev->dev, in dw100_start()
1446 dw100_hw_master_bus_disable(dw_dev); in dw100_start()
1447 dw100_hw_init_ctrl(dw_dev); in dw100_start()
1448 dw100_hw_set_pixel_boundary(dw_dev); in dw100_start()
1449 dw100_hw_set_src_crop(dw_dev, &ctx->q_data[DW100_QUEUE_SRC], in dw100_start()
1451 dw100_hw_set_source(dw_dev, &ctx->q_data[DW100_QUEUE_SRC], in dw100_start()
1453 dw100_hw_set_destination(dw_dev, &ctx->q_data[DW100_QUEUE_DST], in dw100_start()
1456 dw100_hw_set_mapping(dw_dev, ctx->map_dma, in dw100_start()
1458 dw100_hw_enable_irq(dw_dev); in dw100_start()
1459 dw100_hw_dewarp_start(dw_dev); in dw100_start()
1462 dw100_hw_master_bus_enable(dw_dev); in dw100_start()
1480 static struct video_device *dw100_init_video_device(struct dw100_device *dw_dev) in dw100_init_video_device() argument
1482 struct video_device *vfd = &dw_dev->vfd; in dw100_init_video_device()
1490 vfd->v4l2_dev = &dw_dev->v4l2_dev; in dw100_init_video_device()
1491 vfd->lock = &dw_dev->vfd_mutex; in dw100_init_video_device()
1495 video_set_drvdata(vfd, dw_dev); in dw100_init_video_device()
1502 struct dw100_device *dw_dev = m->private; in dw100_dump_regs_show() local
1505 ret = pm_runtime_resume_and_get(&dw_dev->pdev->dev); in dw100_dump_regs_show()
1511 pm_runtime_put_sync(&dw_dev->pdev->dev); in dw100_dump_regs_show()
1517 static void dw100_debugfs_init(struct dw100_device *dw_dev) in dw100_debugfs_init() argument
1519 dw_dev->debugfs_root = in dw100_debugfs_init()
1520 debugfs_create_dir(dev_name(&dw_dev->pdev->dev), NULL); in dw100_debugfs_init()
1522 debugfs_create_file("dump_regs", 0600, dw_dev->debugfs_root, dw_dev, in dw100_debugfs_init()
1526 static void dw100_debugfs_exit(struct dw100_device *dw_dev) in dw100_debugfs_exit() argument
1528 debugfs_remove_recursive(dw_dev->debugfs_root); in dw100_debugfs_exit()
1533 struct dw100_device *dw_dev; in dw100_probe() local
1537 dw_dev = devm_kzalloc(&pdev->dev, sizeof(*dw_dev), GFP_KERNEL); in dw100_probe()
1538 if (!dw_dev) in dw100_probe()
1540 dw_dev->pdev = pdev; in dw100_probe()
1542 ret = devm_clk_bulk_get_all(&pdev->dev, &dw_dev->clks); in dw100_probe()
1547 dw_dev->num_clks = ret; in dw100_probe()
1549 dw_dev->mmio = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); in dw100_probe()
1550 if (IS_ERR(dw_dev->mmio)) in dw100_probe()
1551 return PTR_ERR(dw_dev->mmio); in dw100_probe()
1557 platform_set_drvdata(pdev, dw_dev); in dw100_probe()
1569 dev_name(&pdev->dev), dw_dev); in dw100_probe()
1575 ret = v4l2_device_register(&pdev->dev, &dw_dev->v4l2_dev); in dw100_probe()
1579 vfd = dw100_init_video_device(dw_dev); in dw100_probe()
1581 dw_dev->m2m_dev = v4l2_m2m_init(&dw100_m2m_ops); in dw100_probe()
1582 if (IS_ERR(dw_dev->m2m_dev)) { in dw100_probe()
1584 ret = PTR_ERR(dw_dev->m2m_dev); in dw100_probe()
1588 dw_dev->mdev.dev = &pdev->dev; in dw100_probe()
1589 strscpy(dw_dev->mdev.model, "dw100", sizeof(dw_dev->mdev.model)); in dw100_probe()
1590 media_device_init(&dw_dev->mdev); in dw100_probe()
1591 dw_dev->v4l2_dev.mdev = &dw_dev->mdev; in dw100_probe()
1599 ret = v4l2_m2m_register_media_controller(dw_dev->m2m_dev, vfd, in dw100_probe()
1606 ret = media_device_register(&dw_dev->mdev); in dw100_probe()
1612 dw100_debugfs_init(dw_dev); in dw100_probe()
1620 v4l2_m2m_unregister_media_controller(dw_dev->m2m_dev); in dw100_probe()
1624 media_device_cleanup(&dw_dev->mdev); in dw100_probe()
1625 v4l2_m2m_release(dw_dev->m2m_dev); in dw100_probe()
1627 v4l2_device_unregister(&dw_dev->v4l2_dev); in dw100_probe()
1636 struct dw100_device *dw_dev = platform_get_drvdata(pdev); in dw100_remove() local
1638 dw100_debugfs_exit(dw_dev); in dw100_remove()
1642 media_device_unregister(&dw_dev->mdev); in dw100_remove()
1643 v4l2_m2m_unregister_media_controller(dw_dev->m2m_dev); in dw100_remove()
1644 media_device_cleanup(&dw_dev->mdev); in dw100_remove()
1646 video_unregister_device(&dw_dev->vfd); in dw100_remove()
1647 mutex_destroy(dw_dev->vfd.lock); in dw100_remove()
1648 v4l2_m2m_release(dw_dev->m2m_dev); in dw100_remove()
1649 v4l2_device_unregister(&dw_dev->v4l2_dev); in dw100_remove()
1654 struct dw100_device *dw_dev = dev_get_drvdata(dev); in dw100_runtime_suspend() local
1656 clk_bulk_disable_unprepare(dw_dev->num_clks, dw_dev->clks); in dw100_runtime_suspend()
1664 struct dw100_device *dw_dev = dev_get_drvdata(dev); in dw100_runtime_resume() local
1666 ret = clk_bulk_prepare_enable(dw_dev->num_clks, dw_dev->clks); in dw100_runtime_resume()
1671 dw100_hw_reset(dw_dev); in dw100_runtime_resume()