Add support for TPG found on QCS8300 (Titan 690). Signed-off-by: Wenmeng Liu <quic_wenmliu@xxxxxxxxxxx> --- QCS8300 is a Qualcomm SoC. This series adds driver changes to bring up TPG in QCS8300. Tested with following commands: - media-ctl --reset - v4l2-ctl -d /dev/v4l-subdev0 -c test_pattern=0 - media-ctl -V '"msm_tpg0":0[fmt:SRGGB10/4608x2592 field:none]' - media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4608x2592 field:none]' - media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4608x2592 field:none]' - media-ctl -l '"msm_tpg0":1->"msm_csid0":0[1]' - media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]' - v4l2-ctl -d /dev/v4l-subdev0 -c test_pattern=9 - yavta -B capture-mplane -n 5 -f SRGGB10P -s 4608x2592 /dev/video0 --capture=7 Used following tools for the sanity check of these changes. - make -j32 W=1 - ./scripts/checkpatch.pl --- This patch series depends on patch series: - https://lore.kernel.org/all/20250214095611.2498950-1-quic_vikramsa@xxxxxxxxxxx/ - https://lore.kernel.org/all/20250211-sa8775p_tpg-v1-1-3f76c5f8431f@xxxxxxxxxxx/ --- Signed-off-by: Wenmeng Liu <quic_wenmliu@xxxxxxxxxxx> --- drivers/media/platform/qcom/camss/camss.c | 52 ++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c index 63dc8222bda7ae957041fe4124a6b5194dfe0ce2..39442e2e36c31b58ba529ffdeab11a9bcc57178c 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -2320,6 +2320,53 @@ static const struct camss_subdev_resources csiphy_res_8300[] = { }, }; +static const struct camss_subdev_resources tpg_res_8300[] = { + /* TPG0 */ + { + .regulators = { }, + .clock = { "csiphy_rx" }, + .clock_rate = { { 400000000 } }, + .reg = { "tpg0" }, + .interrupt = { "tpg0" }, + .tpg = { + .lane_cnt = 4, + .vc_cnt = 1, + .formats = &tpg_formats_gen1, + .hw_ops = &tpg_ops_gen1 + } + }, + + /* TPG1 */ + { + .regulators = { }, + .clock = { "csiphy_rx" }, + .clock_rate = { { 400000000 } }, + .reg = { "tpg1" }, + .interrupt = { "tpg1" }, + .tpg = { + .lane_cnt = 4, + .vc_cnt = 1, + .formats = &tpg_formats_gen1, + .hw_ops = &tpg_ops_gen1 + } + }, + + /* TPG2 */ + { + .regulators = { }, + .clock = { "csiphy_rx" }, + .clock_rate = { { 400000000 } }, + .reg = { "tpg2" }, + .interrupt = { "tpg2" }, + .tpg = { + .lane_cnt = 4, + .vc_cnt = 1, + .formats = &tpg_formats_gen1, + .hw_ops = &tpg_ops_gen1 + } + }, +}; + static const struct camss_subdev_resources csid_res_8300[] = { /* CSID0 */ { @@ -3986,7 +4033,8 @@ static int camss_probe(struct platform_device *pdev) if (!camss->csiphy) return -ENOMEM; - if (camss->res->version == CAMSS_8775P) { + if (camss->res->version == CAMSS_8775P || + camss->res->version == CAMSS_8300) { camss->tpg = devm_kcalloc(dev, camss->res->tpg_num, sizeof(*camss->tpg), GFP_KERNEL); if (!camss->tpg) @@ -4171,11 +4219,13 @@ static const struct camss_resources qcs8300_resources = { .version = CAMSS_8300, .pd_name = "top", .csiphy_res = csiphy_res_8300, + .tpg_res = tpg_res_8300, .csid_res = csid_res_8300, .csid_wrapper_res = &csid_wrapper_res_qcs8300, .vfe_res = vfe_res_8300, .icc_res = icc_res_qcs8300, .csiphy_num = ARRAY_SIZE(csiphy_res_8300), + .tpg_num = ARRAY_SIZE(tpg_res_8300), .csid_num = ARRAY_SIZE(csid_res_8300), .vfe_num = ARRAY_SIZE(vfe_res_8300), .icc_path_num = ARRAY_SIZE(icc_res_qcs8300), --- base-commit: 4b67fdfa7ee9fad4ec451ac0670dd8ee8df6345d change-id: 20250217-qcs8300_tpg-20cd1db65c37 Best regards, -- Wenmeng Liu <quic_wenmliu@xxxxxxxxxxx>