Hi Bryan, Thank you for the patch. On Wed, Aug 23, 2023 at 11:44:40AM +0100, Bryan O'Donoghue wrote: > The csiphyX_timer and csiX_phy values need not be hard-coded. We can > functionally decompose the string matching inside of a loop. > > Static string values are brittle, difficult to extend and not required > anyway since the camss->res->csiphy_num value informs us of the number > of CSIPHYs and hence the set of potential clocks for a given CSIPHY. > > In simple terms if we have five CSIPHYs we can have no more and no less > than five csiphy_timer clocks. Similarly csi_phy core clocks have a 1:1 > relationship with the PHY they clock. > > Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx> > --- > .../media/platform/qcom/camss/camss-csiphy.c | 37 ++++++++++++------- > 1 file changed, 23 insertions(+), 14 deletions(-) > > diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c > index 0e8c2a59ea241..baf78c525fbfc 100644 > --- a/drivers/media/platform/qcom/camss/camss-csiphy.c > +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c > @@ -536,6 +536,15 @@ static int csiphy_init_formats(struct v4l2_subdev *sd, > return csiphy_set_format(sd, fh ? fh->state : NULL, &format); > } > > +static bool csiphy_match_clock_name(const char *clock_name, const char *format, > + int index) > +{ > + char name[CAMSS_RES_MAX]; > + > + snprintf(name, sizeof(name), format, index); > + return !strcmp(clock_name, name); This is very error-prone. You hide the buffer size from the caller, which will make it prone to buffer overflows. > +} > + > /* > * msm_csiphy_subdev_init - Initialize CSIPHY device structure and resources > * @csiphy: CSIPHY device > @@ -550,7 +559,7 @@ int msm_csiphy_subdev_init(struct camss *camss, > { > struct device *dev = camss->dev; > struct platform_device *pdev = to_platform_device(dev); > - int i, j; > + int i, j, k; > int ret; > > csiphy->camss = camss; > @@ -666,19 +675,19 @@ int msm_csiphy_subdev_init(struct camss *camss, > for (j = 0; j < clock->nfreqs; j++) > clock->freq[j] = res->clock_rate[i][j]; > > - if (!strcmp(clock->name, "csiphy0_timer") || > - !strcmp(clock->name, "csiphy1_timer") || > - !strcmp(clock->name, "csiphy2_timer") || > - !strcmp(clock->name, "csiphy3_timer") || > - !strcmp(clock->name, "csiphy4_timer") || > - !strcmp(clock->name, "csiphy5_timer")) > - csiphy->rate_set[i] = true; > - > - if (camss->res->version == CAMSS_660 && > - (!strcmp(clock->name, "csi0_phy") || > - !strcmp(clock->name, "csi1_phy") || > - !strcmp(clock->name, "csi2_phy"))) > - csiphy->rate_set[i] = true; > + for (k = 0; k < camss->res->csiphy_num; k++) { > + csiphy->rate_set[i] = csiphy_match_clock_name(clock->name, > + "csiphy%d_timer", k); > + if (csiphy->rate_set[i]) > + break; > + > + if (camss->res->version == CAMSS_660) { > + csiphy->rate_set[i] = csiphy_match_clock_name(clock->name, > + "csi%d_phy", k); > + if (csiphy->rate_set[i]) > + break; > + } > + } > } > > return 0; -- Regards, Laurent Pinchart