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

media: qcom: camss: Add sc8280xp support

Add in functional logic throughout the code to support the sc8280xp.

Acked-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>

authored by

Bryan O'Donoghue and committed by
Hans Verkuil
f2a7ffab 4f94419e

+42 -8
+20 -3
drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
··· 513 513 r = &lane_regs_sm8250[0][0]; 514 514 array_size = ARRAY_SIZE(lane_regs_sm8250[0]); 515 515 break; 516 + case CAMSS_8280XP: 517 + r = &lane_regs_sc8280xp[0][0]; 518 + array_size = ARRAY_SIZE(lane_regs_sc8280xp[0]); 519 + break; 516 520 default: 517 521 WARN(1, "unknown cspi version\n"); 518 522 return; ··· 552 548 return lane_mask; 553 549 } 554 550 551 + static bool csiphy_is_gen2(u32 version) 552 + { 553 + bool ret = false; 554 + 555 + switch (version) { 556 + case CAMSS_845: 557 + case CAMSS_8250: 558 + case CAMSS_8280XP: 559 + ret = true; 560 + break; 561 + } 562 + 563 + return ret; 564 + } 565 + 555 566 static void csiphy_lanes_enable(struct csiphy_device *csiphy, 556 567 struct csiphy_config *cfg, 557 568 s64 link_freq, u8 lane_mask) 558 569 { 559 570 struct csiphy_lanes_cfg *c = &cfg->csi2->lane_cfg; 560 - bool is_gen2 = (csiphy->camss->res->version == CAMSS_845 || 561 - csiphy->camss->res->version == CAMSS_8250); 562 571 u8 settle_cnt; 563 572 u8 val; 564 573 int i; ··· 593 576 val = 0x00; 594 577 writel_relaxed(val, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(0)); 595 578 596 - if (is_gen2) 579 + if (csiphy_is_gen2(csiphy->camss->res->version)) 597 580 csiphy_gen2_config_lanes(csiphy, settle_cnt); 598 581 else 599 582 csiphy_gen1_config_lanes(csiphy, cfg, settle_cnt);
+1
drivers/media/platform/qcom/camss/camss-csiphy.c
··· 578 578 break; 579 579 case CAMSS_845: 580 580 case CAMSS_8250: 581 + case CAMSS_8280XP: 581 582 csiphy->formats = csiphy_formats_sdm845; 582 583 csiphy->nformats = ARRAY_SIZE(csiphy_formats_sdm845); 583 584 break;
+20 -5
drivers/media/platform/qcom/camss/camss-vfe.c
··· 225 225 case CAMSS_660: 226 226 case CAMSS_845: 227 227 case CAMSS_8250: 228 + case CAMSS_8280XP: 228 229 switch (sink_code) { 229 230 case MEDIA_BUS_FMT_YUYV8_1X16: 230 231 { ··· 1519 1518 break; 1520 1519 case CAMSS_845: 1521 1520 case CAMSS_8250: 1521 + case CAMSS_8280XP: 1522 1522 l->formats = formats_rdi_845; 1523 1523 l->nformats = ARRAY_SIZE(formats_rdi_845); 1524 1524 break; ··· 1597 1595 .link_validate = v4l2_subdev_link_validate, 1598 1596 }; 1599 1597 1598 + static int vfe_bpl_align(struct vfe_device *vfe) 1599 + { 1600 + int ret = 8; 1601 + 1602 + switch (vfe->camss->res->version) { 1603 + case CAMSS_845: 1604 + case CAMSS_8250: 1605 + case CAMSS_8280XP: 1606 + ret = 16; 1607 + break; 1608 + default: 1609 + break; 1610 + } 1611 + 1612 + return ret; 1613 + } 1614 + 1600 1615 /* 1601 1616 * msm_vfe_register_entities - Register subdev node for VFE module 1602 1617 * @vfe: VFE device ··· 1680 1661 } 1681 1662 1682 1663 video_out->ops = &vfe->video_ops; 1683 - if (vfe->camss->res->version == CAMSS_845 || 1684 - vfe->camss->res->version == CAMSS_8250) 1685 - video_out->bpl_alignment = 16; 1686 - else 1687 - video_out->bpl_alignment = 8; 1664 + video_out->bpl_alignment = vfe_bpl_align(vfe); 1688 1665 video_out->line_based = 0; 1689 1666 if (i == VFE_LINE_PIX) { 1690 1667 video_out->bpl_alignment = 16;
+1
drivers/media/platform/qcom/camss/camss-video.c
··· 1028 1028 break; 1029 1029 case CAMSS_845: 1030 1030 case CAMSS_8250: 1031 + case CAMSS_8280XP: 1031 1032 video->formats = formats_rdi_845; 1032 1033 video->nformats = ARRAY_SIZE(formats_rdi_845); 1033 1034 break;