Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: mtk-jpeg: Get rid of mtk_smi_larb_get/put

MediaTek IOMMU has already added device_link between the consumer
and smi-larb device. If the jpg device calls the pm_runtime_get_sync,
the smi-larb's pm_runtime_get_sync also be called automatically.

After removing the larb_get operations, then mtk_jpeg_clk_init is
also unnecessary. Remove it too.

CC: Xia Jiang <xia.jiang@mediatek.com>
Signed-off-by: Yong Wu <yong.wu@mediatek.com>
Reviewed-by: Evan Green <evgreen@chromium.org>
Acked-by: Rick Chang <rick.chang@mediatek.com>
Reviewed-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Tested-by: Frank Wunderlich <frank-w@public-files.de> # BPI-R2/MT7623
Acked-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>

authored by

Yong Wu and committed by
Mauro Carvalho Chehab
ba3cd671 635319a4

+2 -45
+2 -43
drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
··· 22 22 #include <media/v4l2-ioctl.h> 23 23 #include <media/videobuf2-core.h> 24 24 #include <media/videobuf2-dma-contig.h> 25 - #include <soc/mediatek/smi.h> 26 25 27 26 #include "mtk_jpeg_enc_hw.h" 28 27 #include "mtk_jpeg_dec_hw.h" ··· 1054 1055 { 1055 1056 int ret; 1056 1057 1057 - ret = mtk_smi_larb_get(jpeg->larb); 1058 - if (ret) 1059 - dev_err(jpeg->dev, "mtk_smi_larb_get larbvdec fail %d\n", ret); 1060 - 1061 1058 ret = clk_bulk_prepare_enable(jpeg->variant->num_clks, 1062 1059 jpeg->variant->clks); 1063 1060 if (ret) ··· 1064 1069 { 1065 1070 clk_bulk_disable_unprepare(jpeg->variant->num_clks, 1066 1071 jpeg->variant->clks); 1067 - mtk_smi_larb_put(jpeg->larb); 1068 1072 } 1069 1073 1070 1074 static irqreturn_t mtk_jpeg_enc_done(struct mtk_jpeg_dev *jpeg) ··· 1278 1284 { .id = "jpgenc" }, 1279 1285 }; 1280 1286 1281 - static int mtk_jpeg_clk_init(struct mtk_jpeg_dev *jpeg) 1282 - { 1283 - struct device_node *node; 1284 - struct platform_device *pdev; 1285 - int ret; 1286 - 1287 - node = of_parse_phandle(jpeg->dev->of_node, "mediatek,larb", 0); 1288 - if (!node) 1289 - return -EINVAL; 1290 - pdev = of_find_device_by_node(node); 1291 - if (WARN_ON(!pdev)) { 1292 - of_node_put(node); 1293 - return -EINVAL; 1294 - } 1295 - of_node_put(node); 1296 - 1297 - jpeg->larb = &pdev->dev; 1298 - 1299 - ret = devm_clk_bulk_get(jpeg->dev, jpeg->variant->num_clks, 1300 - jpeg->variant->clks); 1301 - if (ret) { 1302 - dev_err(&pdev->dev, "failed to get jpeg clock:%d\n", ret); 1303 - put_device(&pdev->dev); 1304 - return ret; 1305 - } 1306 - 1307 - return 0; 1308 - } 1309 - 1310 1287 static void mtk_jpeg_job_timeout_work(struct work_struct *work) 1311 1288 { 1312 1289 struct mtk_jpeg_dev *jpeg = container_of(work, struct mtk_jpeg_dev, ··· 1296 1331 v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_ERROR); 1297 1332 v4l2_m2m_buf_done(dst_buf, VB2_BUF_STATE_ERROR); 1298 1333 v4l2_m2m_job_finish(jpeg->m2m_dev, ctx->fh.m2m_ctx); 1299 - } 1300 - 1301 - static inline void mtk_jpeg_clk_release(struct mtk_jpeg_dev *jpeg) 1302 - { 1303 - put_device(jpeg->larb); 1304 1334 } 1305 1335 1306 1336 static int mtk_jpeg_probe(struct platform_device *pdev) ··· 1332 1372 goto err_req_irq; 1333 1373 } 1334 1374 1335 - ret = mtk_jpeg_clk_init(jpeg); 1375 + ret = devm_clk_bulk_get(jpeg->dev, jpeg->variant->num_clks, 1376 + jpeg->variant->clks); 1336 1377 if (ret) { 1337 1378 dev_err(&pdev->dev, "Failed to init clk, err %d\n", ret); 1338 1379 goto err_clk_init; ··· 1399 1438 v4l2_device_unregister(&jpeg->v4l2_dev); 1400 1439 1401 1440 err_dev_register: 1402 - mtk_jpeg_clk_release(jpeg); 1403 1441 1404 1442 err_clk_init: 1405 1443 ··· 1416 1456 video_device_release(jpeg->vdev); 1417 1457 v4l2_m2m_release(jpeg->m2m_dev); 1418 1458 v4l2_device_unregister(&jpeg->v4l2_dev); 1419 - mtk_jpeg_clk_release(jpeg); 1420 1459 1421 1460 return 0; 1422 1461 }
-2
drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h
··· 85 85 * @alloc_ctx: videobuf2 memory allocator's context 86 86 * @vdev: video device node for jpeg mem2mem mode 87 87 * @reg_base: JPEG registers mapping 88 - * @larb: SMI device 89 88 * @job_timeout_work: IRQ timeout structure 90 89 * @variant: driver variant to be used 91 90 */ ··· 98 99 void *alloc_ctx; 99 100 struct video_device *vdev; 100 101 void __iomem *reg_base; 101 - struct device *larb; 102 102 struct delayed_work job_timeout_work; 103 103 const struct mtk_jpeg_variant *variant; 104 104 };