Re: [PATCH v4] pinctrl: qcom: sc8180x: add ACPI probe support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 10, 2021 at 01:24:49PM -0600, Bjorn Andersson wrote:
> > @@ -1588,13 +1610,105 @@ static struct msm_pinctrl_soc_data sc8180x_pinctrl = {
> >  	.nwakeirq_map = ARRAY_SIZE(sc8180x_pdc_map),
> >  };
> >  
> > +static const struct msm_pinctrl_soc_data sc8180x_acpi_pinctrl = {
> > +	.tiles = sc8180x_tiles,
> > +	.ntiles = ARRAY_SIZE(sc8180x_tiles),
> > +	.pins = sc8180x_pins,
> > +	.npins = ARRAY_SIZE(sc8180x_pins),
> > +	.groups = sc8180x_groups,
> > +	.ngroups = ARRAY_SIZE(sc8180x_groups),
> > +	.reserved_gpios = sc8180x_acpi_reserved_gpios,
> > +	.ngpios = 191,
> 
> As I said before, there really only is 190 things called "GPIO" on this
> platform - the 191 thing is a hack of mine, but it's inclusion here
> should depend on how the ACPI system would reset the UFS device - if it
> does so at all.

No, so far I do not see reset is required for ACPI boot.  I will keep it
as 190 to match hardware spec.

> 
> > +};
> > +
> 
> A comment describing the purpose of this function (to split the
> IORESOURCE_MEM into three) would be in its place.

Okay.

> 
> > +static int sc8180x_pinctrl_add_tile_resources(struct platform_device *pdev)
> > +{
> > +	int nres_num = pdev->num_resources + ARRAY_SIZE(sc8180x_tiles) - 1;
> > +	struct resource *mres, *nres, *res;
> > +	int i, ret;
> > +
> > +	/*
> > +	 * DT already has tiles defined properly, so nothing needs to be done
> > +	 * for DT probe.
> > +	 */
> > +	if (pdev->dev.of_node)
> > +		return 0;
> > +
> > +	/* Allocate for new resources */
> > +	nres = devm_kzalloc(&pdev->dev, sizeof(*nres) * nres_num, GFP_KERNEL);
> > +	if (!nres)
> > +		return -ENOMEM;
> > +
> > +	res = nres;
> > +
> > +	for (i = 0; i < pdev->num_resources; i++) {
> > +		struct resource *r = &pdev->resource[i];
> > +
> > +		/* Save memory resource and copy others */
> > +		if (resource_type(r) == IORESOURCE_MEM)
> > +			mres = r;
> > +		else
> > +			*res++ = *r;
> > +	}
> > +
> > +	/* Append tile memory resources */
> > +	for (i = 0; i < ARRAY_SIZE(sc8180x_tiles); i++, res++) {
> > +		const struct tile_info *info = &sc8180x_tile_info[i];
> > +
> > +		res->start = mres->start + info->offset;
> > +		res->end = mres->start + info->offset + info->size - 1;
> > +		res->flags = mres->flags;
> > +		res->name = sc8180x_tiles[i];
> > +
> > +		/* Add new MEM to resource tree */
> > +		insert_resource(mres->parent, res);
> > +	}
> > +
> > +	/* Remove old MEM from resource tree */
> > +	remove_resource(mres);
> > +
> > +	/* Free old resources and install new ones */
> > +	ret = platform_device_add_resources(pdev, nres, nres_num);
> > +	if (ret) {
> > +		dev_err(&pdev->dev, "failed to add new resources: %d\n", ret);
> > +		return ret;
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> >  static int sc8180x_pinctrl_probe(struct platform_device *pdev)
> >  {
> > -	return msm_pinctrl_probe(pdev, &sc8180x_pinctrl);
> > +	const struct msm_pinctrl_soc_data *soc_data;
> > +	int ret;
> > +
> > +	soc_data = device_get_match_data(&pdev->dev);
> > +	if (!soc_data)
> > +		return -EINVAL;
> > +
> > +	ret = sc8180x_pinctrl_add_tile_resources(pdev);
> > +	if (ret) {
> > +		dev_err(&pdev->dev, "failed to add tile resources: %d\n", ret);
> 
> sc8180x_pinctrl_add_tile_resources() already printed an error when we
> get here, so no need to print another one.

Sure.

Shawn



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux