From: Quentin Schulz <quentin.schulz@free-electrons.com> To: Philipp Rossak <embed3d@gmail.com> Cc: lee.jones@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, maxime.ripard@free-electrons.com, wens@csie.org, linux@armlinux.org.uk, jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, davem@davemloft.net, hans.verkuil@cisco.com, mchehab@kernel.org, rask@formelder.dk, clabbe.montjoie@gmail.com, sean@mess.org, krzk@kernel.org, icenowy@aosc.io, edu.molinas@gmail.com, singhalsimran0@gmail.com, linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com Subject: Re: [PATCH v2 06/16] iio: adc: sun4i-gpadc-iio: rework: support multiple sensors Date: Wed, 31 Jan 2018 19:42:36 +0100 [thread overview] Message-ID: <20180131184236.4yhp732l5kenhmp2@qschulz> (raw) In-Reply-To: <20180128232919.12639-7-embed3d@gmail.com> [-- Attachment #1: Type: text/plain, Size: 4093 bytes --] Hi Philipp, On Mon, Jan 29, 2018 at 12:29:09AM +0100, Philipp Rossak wrote: > For adding newer sensor some basic rework of the code is necessary. > > This patch reworks the driver to be able to handle more than one > thermal sensor. Newer SoC like the A80 have 4 thermal sensors. > Because of this the maximal sensor count value was set to 4. > > The sensor_id value is set during sensor registration and is for each > registered sensor indiviual. This makes it able to differntiate the > sensors when the value is read from the register. > > In function sun4i_gpadc_read_raw(), the sensor number of the ths sensor > was directly set to 0 (sun4i_gpadc_temp_read(x,x,0)). This selects > in the temp_read function automatically sensor 0. A check for the > sensor_id is here not required since the old sensors only have one > thermal sensor. In addition to that is the sun4i_gpadc_read_raw() > function only used by the "older" sensors (before A33) where the > thermal sensor was a cobination of an adc and a thermal sensor. > > Signed-off-by: Philipp Rossak <embed3d@gmail.com> > --- > drivers/iio/adc/sun4i-gpadc-iio.c | 36 +++++++++++++++++++++++------------- > include/linux/mfd/sun4i-gpadc.h | 3 +++ > 2 files changed, 26 insertions(+), 13 deletions(-) > > diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c > index 51ec0104d678..ac9ad2f8232f 100644 > --- a/drivers/iio/adc/sun4i-gpadc-iio.c > +++ b/drivers/iio/adc/sun4i-gpadc-iio.c > @@ -67,12 +67,13 @@ struct gpadc_data { > unsigned int tp_adc_select; > unsigned int (*adc_chan_select)(unsigned int chan); > unsigned int adc_chan_mask; > - unsigned int temp_data; > + unsigned int temp_data[MAX_SENSOR_COUNT]; > int (*sample_start)(struct sun4i_gpadc_iio *info); > int (*sample_end)(struct sun4i_gpadc_iio *info); > bool has_bus_clk; > bool has_bus_rst; > bool has_mod_clk; > + int sensor_count; > }; > I've noticed that for H3, A83T, A64 (at least), if DATA reg of sensor 0 is e.g. 0x80, DATA reg of sensor N is at 0x80 + 0x04 * N. Is that verified for other SoCs? Does anyone have some input on this? We could then just use temp_data as the DATA reg "base" and increment by 0x4 depending on the sensor id instead of using a fixed-size array. > static const struct gpadc_data sun4i_gpadc_data = { > @@ -82,9 +83,10 @@ static const struct gpadc_data sun4i_gpadc_data = { > .tp_adc_select = SUN4I_GPADC_CTRL1_TP_ADC_SELECT, > .adc_chan_select = &sun4i_gpadc_chan_select, > .adc_chan_mask = SUN4I_GPADC_CTRL1_ADC_CHAN_MASK, > - .temp_data = SUN4I_GPADC_TEMP_DATA, > + .temp_data = {SUN4I_GPADC_TEMP_DATA, 0, 0, 0}, > .sample_start = sun4i_gpadc_sample_start, > .sample_end = sun4i_gpadc_sample_end, > + .sensor_count = 1, If the solution above is not desirable/possible, could we use something like: unsigned int sun4i_temp_data[] = {SUN4I_GPADC_TEMP_DATA,}; static const struct gpadc_data sun4i_gpadc_data = { .temp_data = &sun4i_temp_data, .sensor_count = ARRAY_SIZE(sun4i_temp_data), }; That avoids 1) inconsistencies between the array size and the array itself, 2) does not require to pad the array with zeroes. [...] > @@ -745,9 +752,12 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) > pm_runtime_enable(&pdev->dev); > > if (IS_ENABLED(CONFIG_THERMAL_OF)) { > - info->tzd = thermal_zone_of_sensor_register(info->sensor_device, > - 0, info, > - &sun4i_ts_tz_ops); > + for (i = 0; i < info->data->sensor_count; i++) { > + info->sensor_id = i; > + info->tzd = thermal_zone_of_sensor_register( > + info->sensor_device, > + i, info, &sun4i_ts_tz_ops); > + } As Maxime said, this does not work. One way would be to have a new structure being: struct sun4i_sensor_info { struct sun4i_gpadc_iio *info; unsigned int sensor_id; }; Or since we only use the iio_dev within the sun4i_gpadc_iio in the .get_temp function, we may replace info by struct iio_dev *indio_dev above. Quentin [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 801 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: quentin.schulz@free-electrons.com (Quentin Schulz) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 06/16] iio: adc: sun4i-gpadc-iio: rework: support multiple sensors Date: Wed, 31 Jan 2018 19:42:36 +0100 [thread overview] Message-ID: <20180131184236.4yhp732l5kenhmp2@qschulz> (raw) In-Reply-To: <20180128232919.12639-7-embed3d@gmail.com> Hi Philipp, On Mon, Jan 29, 2018 at 12:29:09AM +0100, Philipp Rossak wrote: > For adding newer sensor some basic rework of the code is necessary. > > This patch reworks the driver to be able to handle more than one > thermal sensor. Newer SoC like the A80 have 4 thermal sensors. > Because of this the maximal sensor count value was set to 4. > > The sensor_id value is set during sensor registration and is for each > registered sensor indiviual. This makes it able to differntiate the > sensors when the value is read from the register. > > In function sun4i_gpadc_read_raw(), the sensor number of the ths sensor > was directly set to 0 (sun4i_gpadc_temp_read(x,x,0)). This selects > in the temp_read function automatically sensor 0. A check for the > sensor_id is here not required since the old sensors only have one > thermal sensor. In addition to that is the sun4i_gpadc_read_raw() > function only used by the "older" sensors (before A33) where the > thermal sensor was a cobination of an adc and a thermal sensor. > > Signed-off-by: Philipp Rossak <embed3d@gmail.com> > --- > drivers/iio/adc/sun4i-gpadc-iio.c | 36 +++++++++++++++++++++++------------- > include/linux/mfd/sun4i-gpadc.h | 3 +++ > 2 files changed, 26 insertions(+), 13 deletions(-) > > diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c > index 51ec0104d678..ac9ad2f8232f 100644 > --- a/drivers/iio/adc/sun4i-gpadc-iio.c > +++ b/drivers/iio/adc/sun4i-gpadc-iio.c > @@ -67,12 +67,13 @@ struct gpadc_data { > unsigned int tp_adc_select; > unsigned int (*adc_chan_select)(unsigned int chan); > unsigned int adc_chan_mask; > - unsigned int temp_data; > + unsigned int temp_data[MAX_SENSOR_COUNT]; > int (*sample_start)(struct sun4i_gpadc_iio *info); > int (*sample_end)(struct sun4i_gpadc_iio *info); > bool has_bus_clk; > bool has_bus_rst; > bool has_mod_clk; > + int sensor_count; > }; > I've noticed that for H3, A83T, A64 (at least), if DATA reg of sensor 0 is e.g. 0x80, DATA reg of sensor N is at 0x80 + 0x04 * N. Is that verified for other SoCs? Does anyone have some input on this? We could then just use temp_data as the DATA reg "base" and increment by 0x4 depending on the sensor id instead of using a fixed-size array. > static const struct gpadc_data sun4i_gpadc_data = { > @@ -82,9 +83,10 @@ static const struct gpadc_data sun4i_gpadc_data = { > .tp_adc_select = SUN4I_GPADC_CTRL1_TP_ADC_SELECT, > .adc_chan_select = &sun4i_gpadc_chan_select, > .adc_chan_mask = SUN4I_GPADC_CTRL1_ADC_CHAN_MASK, > - .temp_data = SUN4I_GPADC_TEMP_DATA, > + .temp_data = {SUN4I_GPADC_TEMP_DATA, 0, 0, 0}, > .sample_start = sun4i_gpadc_sample_start, > .sample_end = sun4i_gpadc_sample_end, > + .sensor_count = 1, If the solution above is not desirable/possible, could we use something like: unsigned int sun4i_temp_data[] = {SUN4I_GPADC_TEMP_DATA,}; static const struct gpadc_data sun4i_gpadc_data = { .temp_data = &sun4i_temp_data, .sensor_count = ARRAY_SIZE(sun4i_temp_data), }; That avoids 1) inconsistencies between the array size and the array itself, 2) does not require to pad the array with zeroes. [...] > @@ -745,9 +752,12 @@ static int sun4i_gpadc_probe(struct platform_device *pdev) > pm_runtime_enable(&pdev->dev); > > if (IS_ENABLED(CONFIG_THERMAL_OF)) { > - info->tzd = thermal_zone_of_sensor_register(info->sensor_device, > - 0, info, > - &sun4i_ts_tz_ops); > + for (i = 0; i < info->data->sensor_count; i++) { > + info->sensor_id = i; > + info->tzd = thermal_zone_of_sensor_register( > + info->sensor_device, > + i, info, &sun4i_ts_tz_ops); > + } As Maxime said, this does not work. One way would be to have a new structure being: struct sun4i_sensor_info { struct sun4i_gpadc_iio *info; unsigned int sensor_id; }; Or since we only use the iio_dev within the sun4i_gpadc_iio in the .get_temp function, we may replace info by struct iio_dev *indio_dev above. Quentin -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 801 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20180131/9b0655e7/attachment-0001.sig>
next prev parent reply other threads:[~2018-01-31 18:42 UTC|newest] Thread overview: 164+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-01-28 23:29 [PATCH v2 00/16] IIO-based thermal sensor driver for Allwinner H3 and A83T SoC Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 01/16] dt-bindings: update the Allwinner GPADC device tree binding for H3 & A83T Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:19 ` Maxime Ripard 2018-01-29 9:19 ` Maxime Ripard 2018-01-29 9:19 ` Maxime Ripard 2018-01-29 12:30 ` Philipp Rossak 2018-01-29 12:30 ` Philipp Rossak 2018-01-29 12:30 ` Philipp Rossak 2018-01-31 17:40 ` Quentin Schulz 2018-01-31 17:40 ` Quentin Schulz 2018-01-31 17:40 ` Quentin Schulz 2018-01-31 18:14 ` Philipp Rossak 2018-01-31 18:14 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 02/16] arm: config: sunxi_defconfig: enable SUN4I_GPADC Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:21 ` Maxime Ripard 2018-01-29 9:21 ` Maxime Ripard 2018-01-29 9:21 ` Maxime Ripard 2018-01-28 23:29 ` [PATCH v2 03/16] iio: adc: sun4i-gpadc-iio: rename A33-specified registers to contain A33 Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 04/16] iio: adc: sun4i-gpadc-iio: rework: sampling start/end code readout reg Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:27 ` Maxime Ripard 2018-01-29 9:27 ` Maxime Ripard 2018-01-29 9:27 ` Maxime Ripard 2018-01-31 17:51 ` Quentin Schulz 2018-01-31 17:51 ` Quentin Schulz 2018-01-31 17:51 ` Quentin Schulz 2018-01-31 18:35 ` Philipp Rossak 2018-01-31 18:35 ` Philipp Rossak 2018-01-31 18:35 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 05/16] iio: adc: sun4i-gpadc-iio: rework: support clocks and reset Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:31 ` Maxime Ripard 2018-01-29 9:31 ` Maxime Ripard 2018-01-28 23:29 ` [PATCH v2 06/16] iio: adc: sun4i-gpadc-iio: rework: support multiple sensors Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:37 ` Maxime Ripard 2018-01-29 9:37 ` Maxime Ripard 2018-01-29 9:37 ` Maxime Ripard 2018-01-31 18:42 ` Quentin Schulz [this message] 2018-01-31 18:42 ` Quentin Schulz 2018-02-02 14:13 ` Philipp Rossak 2018-02-02 14:13 ` Philipp Rossak 2018-02-02 14:13 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 07/16] iio: adc: sun4i-gpadc-iio: rework: support nvmem calibration data Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:40 ` Maxime Ripard 2018-01-29 9:40 ` Maxime Ripard 2018-01-29 9:40 ` Maxime Ripard 2018-01-29 12:33 ` Philipp Rossak 2018-01-29 12:33 ` Philipp Rossak 2018-01-29 12:33 ` Philipp Rossak 2018-01-30 8:36 ` Maxime Ripard 2018-01-30 8:36 ` Maxime Ripard 2018-01-30 8:36 ` Maxime Ripard 2018-02-02 15:24 ` Philipp Rossak 2018-02-02 15:24 ` Philipp Rossak 2018-02-02 15:24 ` Philipp Rossak 2018-01-31 22:49 ` kbuild test robot 2018-01-31 22:49 ` kbuild test robot 2018-01-31 22:49 ` kbuild test robot 2018-01-28 23:29 ` [PATCH v2 08/16] iio: adc: sun4i-gpadc-iio: rework: add interrupt support Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-31 19:07 ` Quentin Schulz 2018-01-31 19:07 ` Quentin Schulz 2018-01-31 19:07 ` Quentin Schulz 2018-02-02 14:30 ` Philipp Rossak 2018-02-02 14:30 ` Philipp Rossak 2018-02-02 14:30 ` Philipp Rossak 2018-01-31 21:47 ` kbuild test robot 2018-01-31 21:47 ` kbuild test robot 2018-01-31 21:47 ` kbuild test robot 2018-01-28 23:29 ` [PATCH v2 09/16] iio: adc: sun4i-gpadc-iio: add support for H3 thermal sensor Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:46 ` Maxime Ripard 2018-01-29 9:46 ` Maxime Ripard 2018-01-29 9:46 ` Maxime Ripard 2018-01-31 19:23 ` Quentin Schulz 2018-01-31 19:23 ` Quentin Schulz 2018-01-31 19:23 ` Quentin Schulz 2018-02-02 14:42 ` Philipp Rossak 2018-02-02 14:42 ` Philipp Rossak 2018-02-02 14:42 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 10/16] iio: adc: sun4i-gpadc-iio: add support for A83T " Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:48 ` Maxime Ripard 2018-01-29 9:48 ` Maxime Ripard 2018-01-29 9:48 ` Maxime Ripard 2018-01-29 11:53 ` Philipp Rossak 2018-01-29 11:53 ` Philipp Rossak 2018-01-29 11:53 ` Philipp Rossak 2018-01-30 8:32 ` Maxime Ripard 2018-01-30 8:32 ` Maxime Ripard 2018-01-28 23:29 ` [PATCH v2 11/16] arm: dts: sunxi-h3-h5: add support for the thermal sensor in H3 and H5 Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:49 ` Maxime Ripard 2018-01-29 9:49 ` Maxime Ripard 2018-01-29 9:49 ` Maxime Ripard 2018-01-29 11:54 ` Philipp Rossak 2018-01-29 11:54 ` Philipp Rossak 2018-01-29 11:54 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 12/16] arm: dts: sun8i: h3: add support for the thermal sensor in H3 Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 13/16] arm: dts: sun8i: h3: add thermal zone to H3 Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:50 ` Maxime Ripard 2018-01-29 9:50 ` Maxime Ripard 2018-01-29 9:50 ` Maxime Ripard 2018-01-29 11:56 ` Philipp Rossak 2018-01-29 11:56 ` Philipp Rossak 2018-01-29 11:56 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 14/16] arm: dts: sun8i: h3: enable H3 sid controller Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-29 9:52 ` Maxime Ripard 2018-01-29 9:52 ` Maxime Ripard 2018-01-29 9:52 ` Maxime Ripard 2018-01-29 12:03 ` Philipp Rossak 2018-01-29 12:03 ` Philipp Rossak 2018-01-29 12:03 ` Philipp Rossak 2018-04-19 15:11 ` [linux-sunxi] " Kyle Evans 2018-04-19 15:11 ` Kyle Evans 2018-04-19 15:13 ` Icenowy Zheng 2018-04-19 15:13 ` Icenowy Zheng 2018-04-19 15:13 ` Icenowy Zheng 2018-04-19 15:19 ` Kyle Evans 2018-04-19 15:19 ` Kyle Evans 2018-04-19 15:19 ` Kyle Evans 2018-04-20 9:35 ` Philipp Rossak 2018-04-20 9:35 ` Philipp Rossak 2018-04-20 9:35 ` Philipp Rossak 2018-07-24 17:19 ` [linux-sunxi] " Paul Kocialkowski 2018-07-24 17:19 ` Paul Kocialkowski 2018-07-24 17:19 ` Paul Kocialkowski 2018-07-25 9:05 ` [linux-sunxi] " Emmanuel Vadot 2018-07-25 9:05 ` Emmanuel Vadot 2018-07-25 9:05 ` Emmanuel Vadot 2018-07-25 9:05 ` Emmanuel Vadot 2018-07-25 9:12 ` Paul Kocialkowski 2018-07-25 9:12 ` Paul Kocialkowski 2018-07-25 9:12 ` Paul Kocialkowski 2018-07-25 9:12 ` Paul Kocialkowski 2018-01-28 23:29 ` [PATCH v2 15/16] arm: dts: sun8i: a83t: add support for the thermal sensor in A83T Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` [PATCH v2 16/16] arm: dts: sun8i: a83t: add thermal zone to A83T Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak 2018-01-28 23:29 ` Philipp Rossak
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180131184236.4yhp732l5kenhmp2@qschulz \ --to=quentin.schulz@free-electrons.com \ --cc=clabbe.montjoie@gmail.com \ --cc=davem@davemloft.net \ --cc=devicetree@vger.kernel.org \ --cc=edu.molinas@gmail.com \ --cc=embed3d@gmail.com \ --cc=hans.verkuil@cisco.com \ --cc=icenowy@aosc.io \ --cc=jic23@kernel.org \ --cc=knaack.h@gmx.de \ --cc=krzk@kernel.org \ --cc=lars@metafoo.de \ --cc=lee.jones@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-iio@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-sunxi@googlegroups.com \ --cc=linux@armlinux.org.uk \ --cc=mark.rutland@arm.com \ --cc=maxime.ripard@free-electrons.com \ --cc=mchehab@kernel.org \ --cc=pmeerw@pmeerw.net \ --cc=rask@formelder.dk \ --cc=robh+dt@kernel.org \ --cc=sean@mess.org \ --cc=singhalsimran0@gmail.com \ --cc=wens@csie.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.