From: Yangtao Li <tiny.windzz@gmail.com> To: lee.jones@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, maxime.ripard@bootlin.com, wens@csie.org, jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net Cc: devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, Yangtao Li <tiny.windzz@gmail.com> Subject: [PATCH 3/7] iio: adc: sun4i-gpadc: introduce gpadc_enable and gpadc_disable in gpadc_data Date: Fri, 3 May 2019 03:28:09 -0400 [thread overview] Message-ID: <20190503072813.2719-4-tiny.windzz@gmail.com> (raw) In-Reply-To: <20190503072813.2719-1-tiny.windzz@gmail.com> Different sensors may have different enable and disable functions, so introduce enable and disable in gpadc_data to support soc specific function. Signed-off-by: Yangtao Li <tiny.windzz@gmail.com> --- drivers/iio/adc/sun4i-gpadc-iio.c | 37 ++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c index b41ec0d5964d..de6b8556a549 100644 --- a/drivers/iio/adc/sun4i-gpadc-iio.c +++ b/drivers/iio/adc/sun4i-gpadc-iio.c @@ -49,6 +49,8 @@ static unsigned int sun6i_gpadc_chan_select(unsigned int chan) return SUN6I_GPADC_CTRL1_ADC_CHAN_SELECT(chan); } +struct sun4i_gpadc_iio; + struct gpadc_data { int temp_offset; int temp_scale; @@ -56,10 +58,15 @@ struct gpadc_data { unsigned int tp_adc_select; unsigned int (*adc_chan_select)(unsigned int chan); unsigned int adc_chan_mask; + int (*gpadc_enable)(struct sun4i_gpadc_iio *info); + int (*gpadc_disable)(struct sun4i_gpadc_iio *info); unsigned int sensor_count; unsigned int temp_data_base; }; +static int sun4i_gpadc_disable(struct sun4i_gpadc_iio *info); +static int sun4i_gpadc_enable(struct sun4i_gpadc_iio *info); + static const struct gpadc_data sun4i_gpadc_data = { .temp_offset = -1932, .temp_scale = 133, @@ -67,6 +74,8 @@ 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, + .gpadc_enable = sun4i_gpadc_enable, + .gpadc_disable = sun4i_gpadc_disable, .sensor_count = 1, .temp_data_base = SUN4I_GPADC_TEMP_DATA, }; @@ -78,6 +87,8 @@ static const struct gpadc_data sun5i_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, + .gpadc_enable = sun4i_gpadc_enable, + .gpadc_disable = sun4i_gpadc_disable, .sensor_count = 1, .temp_data_base = SUN4I_GPADC_TEMP_DATA, }; @@ -89,6 +100,8 @@ static const struct gpadc_data sun6i_gpadc_data = { .tp_adc_select = SUN6I_GPADC_CTRL1_TP_ADC_SELECT, .adc_chan_select = &sun6i_gpadc_chan_select, .adc_chan_mask = SUN6I_GPADC_CTRL1_ADC_CHAN_MASK, + .gpadc_enable = sun4i_gpadc_enable, + .gpadc_disable = sun4i_gpadc_disable, .sensor_count = 1, .temp_data_base = SUN4I_GPADC_TEMP_DATA, }; @@ -97,6 +110,8 @@ static const struct gpadc_data sun8i_a33_gpadc_data = { .temp_offset = -1662, .temp_scale = 162, .tp_mode_en = SUN8I_GPADC_CTRL1_CHOP_TEMP_EN, + .gpadc_enable = sun4i_gpadc_enable, + .gpadc_disable = sun4i_gpadc_disable, .sensor_count = 1, .temp_data_base = SUN4I_GPADC_TEMP_DATA, }; @@ -402,10 +417,8 @@ static irqreturn_t sun4i_gpadc_fifo_data_irq_handler(int irq, void *dev_id) return IRQ_HANDLED; } -static int sun4i_gpadc_runtime_suspend(struct device *dev) +static int sun4i_gpadc_disable(struct sun4i_gpadc_iio *info) { - struct sun4i_gpadc_iio *info = iio_priv(dev_get_drvdata(dev)); - /* Disable the ADC on IP */ regmap_write(info->regmap, SUN4I_GPADC_CTRL1, 0); /* Disable temperature sensor on IP */ @@ -414,10 +427,8 @@ static int sun4i_gpadc_runtime_suspend(struct device *dev) return 0; } -static int sun4i_gpadc_runtime_resume(struct device *dev) +static int sun4i_gpadc_enable(struct sun4i_gpadc_iio *info) { - struct sun4i_gpadc_iio *info = iio_priv(dev_get_drvdata(dev)); - /* clkin = 6MHz */ regmap_write(info->regmap, SUN4I_GPADC_CTRL0, SUN4I_GPADC_CTRL0_ADC_CLK_DIVIDER(2) | @@ -435,6 +446,20 @@ static int sun4i_gpadc_runtime_resume(struct device *dev) return 0; } +static int sun4i_gpadc_runtime_suspend(struct device *dev) +{ + struct sun4i_gpadc_iio *info = iio_priv(dev_get_drvdata(dev)); + + return info->data->gpadc_disable(info); +} + +static int sun4i_gpadc_runtime_resume(struct device *dev) +{ + struct sun4i_gpadc_iio *info = iio_priv(dev_get_drvdata(dev)); + + return info->data->gpadc_enable(info); +} + static int sun4i_gpadc_get_temp(void *data, int *temp) { struct sun4i_sensor_tzd *tzd = data; -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Yangtao Li <tiny.windzz@gmail.com> To: lee.jones@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, maxime.ripard@bootlin.com, wens@csie.org, jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, Yangtao Li <tiny.windzz@gmail.com>, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 3/7] iio: adc: sun4i-gpadc: introduce gpadc_enable and gpadc_disable in gpadc_data Date: Fri, 3 May 2019 03:28:09 -0400 [thread overview] Message-ID: <20190503072813.2719-4-tiny.windzz@gmail.com> (raw) In-Reply-To: <20190503072813.2719-1-tiny.windzz@gmail.com> Different sensors may have different enable and disable functions, so introduce enable and disable in gpadc_data to support soc specific function. Signed-off-by: Yangtao Li <tiny.windzz@gmail.com> --- drivers/iio/adc/sun4i-gpadc-iio.c | 37 ++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c index b41ec0d5964d..de6b8556a549 100644 --- a/drivers/iio/adc/sun4i-gpadc-iio.c +++ b/drivers/iio/adc/sun4i-gpadc-iio.c @@ -49,6 +49,8 @@ static unsigned int sun6i_gpadc_chan_select(unsigned int chan) return SUN6I_GPADC_CTRL1_ADC_CHAN_SELECT(chan); } +struct sun4i_gpadc_iio; + struct gpadc_data { int temp_offset; int temp_scale; @@ -56,10 +58,15 @@ struct gpadc_data { unsigned int tp_adc_select; unsigned int (*adc_chan_select)(unsigned int chan); unsigned int adc_chan_mask; + int (*gpadc_enable)(struct sun4i_gpadc_iio *info); + int (*gpadc_disable)(struct sun4i_gpadc_iio *info); unsigned int sensor_count; unsigned int temp_data_base; }; +static int sun4i_gpadc_disable(struct sun4i_gpadc_iio *info); +static int sun4i_gpadc_enable(struct sun4i_gpadc_iio *info); + static const struct gpadc_data sun4i_gpadc_data = { .temp_offset = -1932, .temp_scale = 133, @@ -67,6 +74,8 @@ 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, + .gpadc_enable = sun4i_gpadc_enable, + .gpadc_disable = sun4i_gpadc_disable, .sensor_count = 1, .temp_data_base = SUN4I_GPADC_TEMP_DATA, }; @@ -78,6 +87,8 @@ static const struct gpadc_data sun5i_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, + .gpadc_enable = sun4i_gpadc_enable, + .gpadc_disable = sun4i_gpadc_disable, .sensor_count = 1, .temp_data_base = SUN4I_GPADC_TEMP_DATA, }; @@ -89,6 +100,8 @@ static const struct gpadc_data sun6i_gpadc_data = { .tp_adc_select = SUN6I_GPADC_CTRL1_TP_ADC_SELECT, .adc_chan_select = &sun6i_gpadc_chan_select, .adc_chan_mask = SUN6I_GPADC_CTRL1_ADC_CHAN_MASK, + .gpadc_enable = sun4i_gpadc_enable, + .gpadc_disable = sun4i_gpadc_disable, .sensor_count = 1, .temp_data_base = SUN4I_GPADC_TEMP_DATA, }; @@ -97,6 +110,8 @@ static const struct gpadc_data sun8i_a33_gpadc_data = { .temp_offset = -1662, .temp_scale = 162, .tp_mode_en = SUN8I_GPADC_CTRL1_CHOP_TEMP_EN, + .gpadc_enable = sun4i_gpadc_enable, + .gpadc_disable = sun4i_gpadc_disable, .sensor_count = 1, .temp_data_base = SUN4I_GPADC_TEMP_DATA, }; @@ -402,10 +417,8 @@ static irqreturn_t sun4i_gpadc_fifo_data_irq_handler(int irq, void *dev_id) return IRQ_HANDLED; } -static int sun4i_gpadc_runtime_suspend(struct device *dev) +static int sun4i_gpadc_disable(struct sun4i_gpadc_iio *info) { - struct sun4i_gpadc_iio *info = iio_priv(dev_get_drvdata(dev)); - /* Disable the ADC on IP */ regmap_write(info->regmap, SUN4I_GPADC_CTRL1, 0); /* Disable temperature sensor on IP */ @@ -414,10 +427,8 @@ static int sun4i_gpadc_runtime_suspend(struct device *dev) return 0; } -static int sun4i_gpadc_runtime_resume(struct device *dev) +static int sun4i_gpadc_enable(struct sun4i_gpadc_iio *info) { - struct sun4i_gpadc_iio *info = iio_priv(dev_get_drvdata(dev)); - /* clkin = 6MHz */ regmap_write(info->regmap, SUN4I_GPADC_CTRL0, SUN4I_GPADC_CTRL0_ADC_CLK_DIVIDER(2) | @@ -435,6 +446,20 @@ static int sun4i_gpadc_runtime_resume(struct device *dev) return 0; } +static int sun4i_gpadc_runtime_suspend(struct device *dev) +{ + struct sun4i_gpadc_iio *info = iio_priv(dev_get_drvdata(dev)); + + return info->data->gpadc_disable(info); +} + +static int sun4i_gpadc_runtime_resume(struct device *dev) +{ + struct sun4i_gpadc_iio *info = iio_priv(dev_get_drvdata(dev)); + + return info->data->gpadc_enable(info); +} + static int sun4i_gpadc_get_temp(void *data, int *temp) { struct sun4i_sensor_tzd *tzd = data; -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-05-03 7:28 UTC|newest] Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-03 7:28 [PATCH 0/7] Add support for H6 thermal sensor Yangtao Li 2019-05-03 7:28 ` Yangtao Li 2019-05-03 7:28 ` [PATCH 1/7] iio: adc: sun4i-gpadc: rework for support multiple " Yangtao Li 2019-05-03 7:28 ` Yangtao Li 2019-05-05 15:22 ` Jonathan Cameron 2019-05-05 15:22 ` Jonathan Cameron 2019-05-05 15:22 ` Jonathan Cameron 2019-05-06 12:28 ` Maxime Ripard 2019-05-06 12:28 ` Maxime Ripard 2019-05-06 16:52 ` Icenowy Zheng 2019-05-06 16:52 ` Icenowy Zheng 2019-05-06 17:08 ` Frank Lee 2019-05-06 17:08 ` Frank Lee 2019-05-06 17:55 ` Ondřej Jirman 2019-05-06 17:55 ` Ondřej Jirman 2019-05-07 13:59 ` Maxime Ripard 2019-05-07 13:59 ` Maxime Ripard 2019-05-03 7:28 ` [PATCH 2/7] iio: adc: sun4i-gpadc: introduce temp_data in gpadc_data Yangtao Li 2019-05-03 7:28 ` Yangtao Li 2019-05-03 7:28 ` Yangtao Li [this message] 2019-05-03 7:28 ` [PATCH 3/7] iio: adc: sun4i-gpadc: introduce gpadc_enable and gpadc_disable " Yangtao Li 2019-05-03 7:28 ` [PATCH 4/7] iio: adc: sun4i-gpadc-iio: support clocks and reset Yangtao Li 2019-05-03 7:28 ` Yangtao Li 2019-05-03 7:28 ` [PATCH 5/7] dt-bindings: mfd: Add H6 GPADC binding Yangtao Li 2019-05-03 7:28 ` Yangtao Li 2019-05-08 11:44 ` Lee Jones 2019-05-08 11:44 ` Lee Jones 2019-05-03 7:28 ` [PATCH 6/7] iio: adc: sun4i-gpadc-iio: add support for H6 thermal sensor Yangtao Li 2019-05-03 7:28 ` Yangtao Li 2019-05-05 15:25 ` Jonathan Cameron 2019-05-05 15:25 ` Jonathan Cameron 2019-05-08 11:45 ` Lee Jones 2019-05-08 11:45 ` Lee Jones 2019-05-03 7:28 ` [PATCH 7/7] iio: adc: sun4i-gpadc-iio convert to SPDX license tags Yangtao Li 2019-05-03 7:28 ` Yangtao Li 2019-05-03 9:18 ` Maxime Ripard 2019-05-03 9:18 ` Maxime Ripard
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=20190503072813.2719-4-tiny.windzz@gmail.com \ --to=tiny.windzz@gmail.com \ --cc=devicetree@vger.kernel.org \ --cc=jic23@kernel.org \ --cc=knaack.h@gmx.de \ --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=mark.rutland@arm.com \ --cc=maxime.ripard@bootlin.com \ --cc=pmeerw@pmeerw.net \ --cc=robh+dt@kernel.org \ --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.