Message ID | 20170310103921.19469-8-quentin.schulz@free-electrons.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
10.03.2017, 18:56, "Quentin Schulz" <quentin.schulz@free-electrons.com>: > This moves code used in MFD probing to a new sun4i_gpadc_probe_mfd > function. > > Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> > --- > > added in v2 > > drivers/iio/adc/sun4i-gpadc-iio.c | 78 ++++++++++++++++++++++----------------- I cannot find this source file even in linux-next. > 1 file changed, 45 insertions(+), 33 deletions(-) > > diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c > index a8e134f..7cb997a 100644 > --- a/drivers/iio/adc/sun4i-gpadc-iio.c > +++ b/drivers/iio/adc/sun4i-gpadc-iio.c > @@ -454,31 +454,16 @@ static int sun4i_irq_init(struct platform_device *pdev, const char *name, > return 0; > } > > -static int sun4i_gpadc_probe(struct platform_device *pdev) > +static int sun4i_gpadc_probe_mfd(struct platform_device *pdev, > + struct iio_dev *indio_dev) > { > - struct sun4i_gpadc_iio *info; > - struct iio_dev *indio_dev; > + struct sun4i_gpadc_iio *info = iio_priv(indio_dev); > + struct sun4i_gpadc_dev *sun4i_gpadc_dev = > + dev_get_drvdata(pdev->dev.parent); > int ret; > - struct sun4i_gpadc_dev *sun4i_gpadc_dev; > - > - sun4i_gpadc_dev = dev_get_drvdata(pdev->dev.parent); > - > - indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); > - if (!indio_dev) > - return -ENOMEM; > > - info = iio_priv(indio_dev); > - platform_set_drvdata(pdev, indio_dev); > - > - mutex_init(&info->mutex); > info->regmap = sun4i_gpadc_dev->regmap; > - info->indio_dev = indio_dev; > - init_completion(&info->completion); > - indio_dev->name = dev_name(&pdev->dev); > - indio_dev->dev.parent = &pdev->dev; > - indio_dev->dev.of_node = pdev->dev.of_node; > - indio_dev->info = &sun4i_gpadc_iio_info; > - indio_dev->modes = INDIO_DIRECT_MODE; > + > indio_dev->num_channels = ARRAY_SIZE(sun4i_gpadc_channels); > indio_dev->channels = sun4i_gpadc_channels; > > @@ -519,8 +504,7 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) > dev_err(&pdev->dev, > "could not register thermal sensor: %ld\n", > PTR_ERR(tzd)); > - ret = PTR_ERR(tzd); > - goto err; > + return PTR_ERR(tzd); > } > } else { > indio_dev->num_channels = > @@ -528,36 +512,65 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) > indio_dev->channels = sun4i_gpadc_channels_no_temp; > } > > - pm_runtime_set_autosuspend_delay(&pdev->dev, > - SUN4I_GPADC_AUTOSUSPEND_DELAY); > - pm_runtime_use_autosuspend(&pdev->dev); > - pm_runtime_set_suspended(&pdev->dev); > - pm_runtime_enable(&pdev->dev); > - > if (IS_ENABLED(CONFIG_THERMAL_OF)) { > ret = sun4i_irq_init(pdev, "TEMP_DATA_PENDING", > sun4i_gpadc_temp_data_irq_handler, > "temp_data", &info->temp_data_irq, > &info->ignore_temp_data_irq); > if (ret < 0) > - goto err; > + return ret; > } > > ret = sun4i_irq_init(pdev, "FIFO_DATA_PENDING", > sun4i_gpadc_fifo_data_irq_handler, "fifo_data", > &info->fifo_data_irq, &info->ignore_fifo_data_irq); > if (ret < 0) > - goto err; > + return ret; > > if (IS_ENABLED(CONFIG_THERMAL_OF)) { > ret = iio_map_array_register(indio_dev, sun4i_gpadc_hwmon_maps); > if (ret < 0) { > dev_err(&pdev->dev, > "failed to register iio map array\n"); > - goto err; > + return ret; > } > } > > + return 0; > +} > + > +static int sun4i_gpadc_probe(struct platform_device *pdev) > +{ > + struct sun4i_gpadc_iio *info; > + struct iio_dev *indio_dev; > + int ret; > + > + indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); > + if (!indio_dev) > + return -ENOMEM; > + > + info = iio_priv(indio_dev); > + platform_set_drvdata(pdev, indio_dev); > + > + mutex_init(&info->mutex); > + info->indio_dev = indio_dev; > + init_completion(&info->completion); > + indio_dev->name = dev_name(&pdev->dev); > + indio_dev->dev.parent = &pdev->dev; > + indio_dev->dev.of_node = pdev->dev.of_node; > + indio_dev->info = &sun4i_gpadc_iio_info; > + indio_dev->modes = INDIO_DIRECT_MODE; > + > + ret = sun4i_gpadc_probe_mfd(pdev, indio_dev); > + if (ret) > + return ret; > + > + pm_runtime_set_autosuspend_delay(&pdev->dev, > + SUN4I_GPADC_AUTOSUSPEND_DELAY); > + pm_runtime_use_autosuspend(&pdev->dev); > + pm_runtime_set_suspended(&pdev->dev); > + pm_runtime_enable(&pdev->dev); > + > ret = devm_iio_device_register(&pdev->dev, indio_dev); > if (ret < 0) { > dev_err(&pdev->dev, "could not register the device\n"); > @@ -570,7 +583,6 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) > if (IS_ENABLED(CONFIG_THERMAL_OF)) > iio_map_array_unregister(indio_dev); > > -err: > pm_runtime_put(&pdev->dev); > pm_runtime_disable(&pdev->dev); > > -- > 2.9.3 > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hi Icenowy, On 10/03/2017 20:36, Icenowy Zheng wrote: > > > 10.03.2017, 18:56, "Quentin Schulz" <quentin.schulz@free-electrons.com>: >> This moves code used in MFD probing to a new sun4i_gpadc_probe_mfd >> function. >> >> Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> >> --- >> >> added in v2 >> >> drivers/iio/adc/sun4i-gpadc-iio.c | 78 ++++++++++++++++++++++----------------- > > I cannot find this source file even in linux-next. > From the cover letter: This series of patch is based on this[1] series of patch. [1] https://lkml.org/lkml/2016/12/13/298 : "[PATCH v9] add support for Allwinner SoCs ADC" Quentin >> 1 file changed, 45 insertions(+), 33 deletions(-) >> >> diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c >> index a8e134f..7cb997a 100644 >> --- a/drivers/iio/adc/sun4i-gpadc-iio.c >> +++ b/drivers/iio/adc/sun4i-gpadc-iio.c >> @@ -454,31 +454,16 @@ static int sun4i_irq_init(struct platform_device *pdev, const char *name, >> return 0; >> } >> >> -static int sun4i_gpadc_probe(struct platform_device *pdev) >> +static int sun4i_gpadc_probe_mfd(struct platform_device *pdev, >> + struct iio_dev *indio_dev) >> { >> - struct sun4i_gpadc_iio *info; >> - struct iio_dev *indio_dev; >> + struct sun4i_gpadc_iio *info = iio_priv(indio_dev); >> + struct sun4i_gpadc_dev *sun4i_gpadc_dev = >> + dev_get_drvdata(pdev->dev.parent); >> int ret; >> - struct sun4i_gpadc_dev *sun4i_gpadc_dev; >> - >> - sun4i_gpadc_dev = dev_get_drvdata(pdev->dev.parent); >> - >> - indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); >> - if (!indio_dev) >> - return -ENOMEM; >> >> - info = iio_priv(indio_dev); >> - platform_set_drvdata(pdev, indio_dev); >> - >> - mutex_init(&info->mutex); >> info->regmap = sun4i_gpadc_dev->regmap; >> - info->indio_dev = indio_dev; >> - init_completion(&info->completion); >> - indio_dev->name = dev_name(&pdev->dev); >> - indio_dev->dev.parent = &pdev->dev; >> - indio_dev->dev.of_node = pdev->dev.of_node; >> - indio_dev->info = &sun4i_gpadc_iio_info; >> - indio_dev->modes = INDIO_DIRECT_MODE; >> + >> indio_dev->num_channels = ARRAY_SIZE(sun4i_gpadc_channels); >> indio_dev->channels = sun4i_gpadc_channels; >> >> @@ -519,8 +504,7 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) >> dev_err(&pdev->dev, >> "could not register thermal sensor: %ld\n", >> PTR_ERR(tzd)); >> - ret = PTR_ERR(tzd); >> - goto err; >> + return PTR_ERR(tzd); >> } >> } else { >> indio_dev->num_channels = >> @@ -528,36 +512,65 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) >> indio_dev->channels = sun4i_gpadc_channels_no_temp; >> } >> >> - pm_runtime_set_autosuspend_delay(&pdev->dev, >> - SUN4I_GPADC_AUTOSUSPEND_DELAY); >> - pm_runtime_use_autosuspend(&pdev->dev); >> - pm_runtime_set_suspended(&pdev->dev); >> - pm_runtime_enable(&pdev->dev); >> - >> if (IS_ENABLED(CONFIG_THERMAL_OF)) { >> ret = sun4i_irq_init(pdev, "TEMP_DATA_PENDING", >> sun4i_gpadc_temp_data_irq_handler, >> "temp_data", &info->temp_data_irq, >> &info->ignore_temp_data_irq); >> if (ret < 0) >> - goto err; >> + return ret; >> } >> >> ret = sun4i_irq_init(pdev, "FIFO_DATA_PENDING", >> sun4i_gpadc_fifo_data_irq_handler, "fifo_data", >> &info->fifo_data_irq, &info->ignore_fifo_data_irq); >> if (ret < 0) >> - goto err; >> + return ret; >> >> if (IS_ENABLED(CONFIG_THERMAL_OF)) { >> ret = iio_map_array_register(indio_dev, sun4i_gpadc_hwmon_maps); >> if (ret < 0) { >> dev_err(&pdev->dev, >> "failed to register iio map array\n"); >> - goto err; >> + return ret; >> } >> } >> >> + return 0; >> +} >> + >> +static int sun4i_gpadc_probe(struct platform_device *pdev) >> +{ >> + struct sun4i_gpadc_iio *info; >> + struct iio_dev *indio_dev; >> + int ret; >> + >> + indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); >> + if (!indio_dev) >> + return -ENOMEM; >> + >> + info = iio_priv(indio_dev); >> + platform_set_drvdata(pdev, indio_dev); >> + >> + mutex_init(&info->mutex); >> + info->indio_dev = indio_dev; >> + init_completion(&info->completion); >> + indio_dev->name = dev_name(&pdev->dev); >> + indio_dev->dev.parent = &pdev->dev; >> + indio_dev->dev.of_node = pdev->dev.of_node; >> + indio_dev->info = &sun4i_gpadc_iio_info; >> + indio_dev->modes = INDIO_DIRECT_MODE; >> + >> + ret = sun4i_gpadc_probe_mfd(pdev, indio_dev); >> + if (ret) >> + return ret; >> + >> + pm_runtime_set_autosuspend_delay(&pdev->dev, >> + SUN4I_GPADC_AUTOSUSPEND_DELAY); >> + pm_runtime_use_autosuspend(&pdev->dev); >> + pm_runtime_set_suspended(&pdev->dev); >> + pm_runtime_enable(&pdev->dev); >> + >> ret = devm_iio_device_register(&pdev->dev, indio_dev); >> if (ret < 0) { >> dev_err(&pdev->dev, "could not register the device\n"); >> @@ -570,7 +583,6 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) >> if (IS_ENABLED(CONFIG_THERMAL_OF)) >> iio_map_array_unregister(indio_dev); >> >> -err: >> pm_runtime_put(&pdev->dev); >> pm_runtime_disable(&pdev->dev); >> >> -- >> 2.9.3 >> >> _______________________________________________ >> linux-arm-kernel mailing list >> linux-arm-kernel@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >
On 10/03/17 10:39, Quentin Schulz wrote: > This moves code used in MFD probing to a new sun4i_gpadc_probe_mfd > function. > > Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Looks sane to me - though a hint on why in the explanation wouldn't go amiss! We'll have to figure out the path for this series at somepoint. In meantime Acked-by: Jonathan Cameron <jic23@kernel.org> > --- > > added in v2 > > drivers/iio/adc/sun4i-gpadc-iio.c | 78 ++++++++++++++++++++++----------------- > 1 file changed, 45 insertions(+), 33 deletions(-) > > diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c > index a8e134f..7cb997a 100644 > --- a/drivers/iio/adc/sun4i-gpadc-iio.c > +++ b/drivers/iio/adc/sun4i-gpadc-iio.c > @@ -454,31 +454,16 @@ static int sun4i_irq_init(struct platform_device *pdev, const char *name, > return 0; > } > > -static int sun4i_gpadc_probe(struct platform_device *pdev) > +static int sun4i_gpadc_probe_mfd(struct platform_device *pdev, > + struct iio_dev *indio_dev) > { > - struct sun4i_gpadc_iio *info; > - struct iio_dev *indio_dev; > + struct sun4i_gpadc_iio *info = iio_priv(indio_dev); > + struct sun4i_gpadc_dev *sun4i_gpadc_dev = > + dev_get_drvdata(pdev->dev.parent); > int ret; > - struct sun4i_gpadc_dev *sun4i_gpadc_dev; > - > - sun4i_gpadc_dev = dev_get_drvdata(pdev->dev.parent); > - > - indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); > - if (!indio_dev) > - return -ENOMEM; > > - info = iio_priv(indio_dev); > - platform_set_drvdata(pdev, indio_dev); > - > - mutex_init(&info->mutex); > info->regmap = sun4i_gpadc_dev->regmap; > - info->indio_dev = indio_dev; > - init_completion(&info->completion); > - indio_dev->name = dev_name(&pdev->dev); > - indio_dev->dev.parent = &pdev->dev; > - indio_dev->dev.of_node = pdev->dev.of_node; > - indio_dev->info = &sun4i_gpadc_iio_info; > - indio_dev->modes = INDIO_DIRECT_MODE; > + > indio_dev->num_channels = ARRAY_SIZE(sun4i_gpadc_channels); > indio_dev->channels = sun4i_gpadc_channels; > > @@ -519,8 +504,7 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) > dev_err(&pdev->dev, > "could not register thermal sensor: %ld\n", > PTR_ERR(tzd)); > - ret = PTR_ERR(tzd); > - goto err; > + return PTR_ERR(tzd); > } > } else { > indio_dev->num_channels = > @@ -528,36 +512,65 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) > indio_dev->channels = sun4i_gpadc_channels_no_temp; > } > > - pm_runtime_set_autosuspend_delay(&pdev->dev, > - SUN4I_GPADC_AUTOSUSPEND_DELAY); > - pm_runtime_use_autosuspend(&pdev->dev); > - pm_runtime_set_suspended(&pdev->dev); > - pm_runtime_enable(&pdev->dev); > - > if (IS_ENABLED(CONFIG_THERMAL_OF)) { > ret = sun4i_irq_init(pdev, "TEMP_DATA_PENDING", > sun4i_gpadc_temp_data_irq_handler, > "temp_data", &info->temp_data_irq, > &info->ignore_temp_data_irq); > if (ret < 0) > - goto err; > + return ret; > } > > ret = sun4i_irq_init(pdev, "FIFO_DATA_PENDING", > sun4i_gpadc_fifo_data_irq_handler, "fifo_data", > &info->fifo_data_irq, &info->ignore_fifo_data_irq); > if (ret < 0) > - goto err; > + return ret; > > if (IS_ENABLED(CONFIG_THERMAL_OF)) { > ret = iio_map_array_register(indio_dev, sun4i_gpadc_hwmon_maps); > if (ret < 0) { > dev_err(&pdev->dev, > "failed to register iio map array\n"); > - goto err; > + return ret; > } > } > > + return 0; > +} > + > +static int sun4i_gpadc_probe(struct platform_device *pdev) > +{ > + struct sun4i_gpadc_iio *info; > + struct iio_dev *indio_dev; > + int ret; > + > + indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); > + if (!indio_dev) > + return -ENOMEM; > + > + info = iio_priv(indio_dev); > + platform_set_drvdata(pdev, indio_dev); > + > + mutex_init(&info->mutex); > + info->indio_dev = indio_dev; > + init_completion(&info->completion); > + indio_dev->name = dev_name(&pdev->dev); > + indio_dev->dev.parent = &pdev->dev; > + indio_dev->dev.of_node = pdev->dev.of_node; > + indio_dev->info = &sun4i_gpadc_iio_info; > + indio_dev->modes = INDIO_DIRECT_MODE; > + > + ret = sun4i_gpadc_probe_mfd(pdev, indio_dev); > + if (ret) > + return ret; > + > + pm_runtime_set_autosuspend_delay(&pdev->dev, > + SUN4I_GPADC_AUTOSUSPEND_DELAY); > + pm_runtime_use_autosuspend(&pdev->dev); > + pm_runtime_set_suspended(&pdev->dev); > + pm_runtime_enable(&pdev->dev); > + > ret = devm_iio_device_register(&pdev->dev, indio_dev); > if (ret < 0) { > dev_err(&pdev->dev, "could not register the device\n"); > @@ -570,7 +583,6 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) > if (IS_ENABLED(CONFIG_THERMAL_OF)) > iio_map_array_unregister(indio_dev); > > -err: > pm_runtime_put(&pdev->dev); > pm_runtime_disable(&pdev->dev); > >
diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c index a8e134f..7cb997a 100644 --- a/drivers/iio/adc/sun4i-gpadc-iio.c +++ b/drivers/iio/adc/sun4i-gpadc-iio.c @@ -454,31 +454,16 @@ static int sun4i_irq_init(struct platform_device *pdev, const char *name, return 0; } -static int sun4i_gpadc_probe(struct platform_device *pdev) +static int sun4i_gpadc_probe_mfd(struct platform_device *pdev, + struct iio_dev *indio_dev) { - struct sun4i_gpadc_iio *info; - struct iio_dev *indio_dev; + struct sun4i_gpadc_iio *info = iio_priv(indio_dev); + struct sun4i_gpadc_dev *sun4i_gpadc_dev = + dev_get_drvdata(pdev->dev.parent); int ret; - struct sun4i_gpadc_dev *sun4i_gpadc_dev; - - sun4i_gpadc_dev = dev_get_drvdata(pdev->dev.parent); - - indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); - if (!indio_dev) - return -ENOMEM; - info = iio_priv(indio_dev); - platform_set_drvdata(pdev, indio_dev); - - mutex_init(&info->mutex); info->regmap = sun4i_gpadc_dev->regmap; - info->indio_dev = indio_dev; - init_completion(&info->completion); - indio_dev->name = dev_name(&pdev->dev); - indio_dev->dev.parent = &pdev->dev; - indio_dev->dev.of_node = pdev->dev.of_node; - indio_dev->info = &sun4i_gpadc_iio_info; - indio_dev->modes = INDIO_DIRECT_MODE; + indio_dev->num_channels = ARRAY_SIZE(sun4i_gpadc_channels); indio_dev->channels = sun4i_gpadc_channels; @@ -519,8 +504,7 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) dev_err(&pdev->dev, "could not register thermal sensor: %ld\n", PTR_ERR(tzd)); - ret = PTR_ERR(tzd); - goto err; + return PTR_ERR(tzd); } } else { indio_dev->num_channels = @@ -528,36 +512,65 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) indio_dev->channels = sun4i_gpadc_channels_no_temp; } - pm_runtime_set_autosuspend_delay(&pdev->dev, - SUN4I_GPADC_AUTOSUSPEND_DELAY); - pm_runtime_use_autosuspend(&pdev->dev); - pm_runtime_set_suspended(&pdev->dev); - pm_runtime_enable(&pdev->dev); - if (IS_ENABLED(CONFIG_THERMAL_OF)) { ret = sun4i_irq_init(pdev, "TEMP_DATA_PENDING", sun4i_gpadc_temp_data_irq_handler, "temp_data", &info->temp_data_irq, &info->ignore_temp_data_irq); if (ret < 0) - goto err; + return ret; } ret = sun4i_irq_init(pdev, "FIFO_DATA_PENDING", sun4i_gpadc_fifo_data_irq_handler, "fifo_data", &info->fifo_data_irq, &info->ignore_fifo_data_irq); if (ret < 0) - goto err; + return ret; if (IS_ENABLED(CONFIG_THERMAL_OF)) { ret = iio_map_array_register(indio_dev, sun4i_gpadc_hwmon_maps); if (ret < 0) { dev_err(&pdev->dev, "failed to register iio map array\n"); - goto err; + return ret; } } + return 0; +} + +static int sun4i_gpadc_probe(struct platform_device *pdev) +{ + struct sun4i_gpadc_iio *info; + struct iio_dev *indio_dev; + int ret; + + indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); + if (!indio_dev) + return -ENOMEM; + + info = iio_priv(indio_dev); + platform_set_drvdata(pdev, indio_dev); + + mutex_init(&info->mutex); + info->indio_dev = indio_dev; + init_completion(&info->completion); + indio_dev->name = dev_name(&pdev->dev); + indio_dev->dev.parent = &pdev->dev; + indio_dev->dev.of_node = pdev->dev.of_node; + indio_dev->info = &sun4i_gpadc_iio_info; + indio_dev->modes = INDIO_DIRECT_MODE; + + ret = sun4i_gpadc_probe_mfd(pdev, indio_dev); + if (ret) + return ret; + + pm_runtime_set_autosuspend_delay(&pdev->dev, + SUN4I_GPADC_AUTOSUSPEND_DELAY); + pm_runtime_use_autosuspend(&pdev->dev); + pm_runtime_set_suspended(&pdev->dev); + pm_runtime_enable(&pdev->dev); + ret = devm_iio_device_register(&pdev->dev, indio_dev); if (ret < 0) { dev_err(&pdev->dev, "could not register the device\n"); @@ -570,7 +583,6 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) if (IS_ENABLED(CONFIG_THERMAL_OF)) iio_map_array_unregister(indio_dev); -err: pm_runtime_put(&pdev->dev); pm_runtime_disable(&pdev->dev);
This moves code used in MFD probing to a new sun4i_gpadc_probe_mfd function. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> --- added in v2 drivers/iio/adc/sun4i-gpadc-iio.c | 78 ++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 33 deletions(-)