iio: adc: npcm: add Arbel NPCM8XX support
Subsystems (3)
Tomer Maimon
maintainerv2 cover iio: adc: npcm: add Arbel NPCM8XX support
This patch set adds Arbel NPCM8XX Analog-to-Digital Converter (ADC) support to ADC NPCM driver.
The NPCM8XX ADC is a 12-bit converter for eight channel inputs.
The NPCM ADC driver tested on NPCM845 evaluation board.
Addressed comments from:
- Rob Herring : https://www.spinics.net/lists/kernel/msg4433755.html
- Krzysztof Kozlowski: https://www.spinics.net/lists/kernel/msg4434546.html
- Andy Shevchenko : https://www.spinics.net/lists/devicetree/msg516844.html
Changes since version 1:
- Modify dt-binding compatible property.
- Use device_get_match_data function instead of_match_node function.
Tomer Maimon (2):
dt-bindings: iio: adc: npcm: Add npcm845 compatible string
iio: adc: npcm: Add NPCM8XX support
.../bindings/iio/adc/nuvoton,npcm750-adc.yaml | 7 ++-- drivers/iio/adc/npcm_adc.c | 35 +++++++++++++++---- 2 files changed, 33 insertions(+), 9 deletions(-)
Signature · 1 line
2.33.0
Tomer Maimon
maintainerPATCH v2 1/2 dt-bindings: iio: adc: npcm: Add npcm845 compatible string
Add a compatible string for Nuvoton BMC NPCM845 ADC.
--- .../devicetree/bindings/iio/adc/nuvoton,npcm750-adc.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
Documentation/devicetree/bindings/iio/adc/nuvoton,npcm750-adc.yaml +5 -2
@@ -10,11 +10,14 @@ maintainers: - Tomer Maimon <[email protected]> description: - The NPCM ADC is a 10-bit converter for eight channel inputs. + The NPCM7XX ADC is a 10-bit converter and NPCM8XX ADC is a 12-bit converter, + both have eight channel inputs. properties: compatible: - const: nuvoton,npcm750-adc + enum: + - nuvoton,npcm750-adc + - nuvoton,npcm845-adc reg: maxItems: 1
Signature · 1 line
2.33.0
Re: [PATCH v2 1/2] dt-bindings: iio: adc: npcm: Add npcm845 compatible string
Quoted 3 lines · Tomer Maimon
Add a compatible string for Nuvoton BMC NPCM845 ADC.
Signed-off-by Tomer Maimon <[email protected]>
I assume all properties from NPCM750 apply here as well:
Best regards,
Krzysztof
Tomer Maimon
maintainerPATCH v2 2/2 iio: adc: npcm: Add NPCM8XX support
In reply to Tomer MaimonAdding ADC NPCM8XX support to NPCM ADC driver.
ADC NPCM8XX uses a different resolution and voltage reference.
As part of adding NPCM8XX support:
- Add NPCM8XX specific compatible string.
- Add data to handle architecture-specific ADC parameters.
--- drivers/iio/adc/npcm_adc.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-)
drivers/iio/adc/npcm_adc.c +28 -7
@@ -16,6 +16,12 @@#include <linux/uaccess.h> #include <linux/reset.h> +struct npcm_adc_info { +u32 data_mask; +u32 internal_vref; +u32 res_bits; +}; +struct npcm_adc {bool int_status;u32 adc_sample_hz;
@@ -34,6 +40,7 @@ struct npcm_adc {* has finished. */ struct mutex lock; +struct npcm_adc_info *data; };/* ADC registers */
@@ -52,13 +59,21 @@ struct npcm_adc {#define NPCM_ADCCON_CH (x) ((x) << 24)#define NPCM_ADCCON_DIV_SHIFT 1#define NPCM_ADCCON_DIV_MASK GENMASK(8, 1) -#define NPCM_ADC_DATA_MASK (x) ((x) & GENMASK(9, 0))#define NPCM_ADC_ENABLE (NPCM_ADCCON_ADC_EN | NPCM_ADCCON_ADC_INT_EN)/* ADC General Definition */ -#define NPCM_RESOLUTION_BITS 10 -#define NPCM_INT_VREF_MV 2000 +static const struct npcm_adc_info npxm7xx_adc_info = { + .data_mask =GENMASK (9 ,0 ), + .internal_vref =2048 , + .res_bits =10 , +}; + +static const struct npcm_adc_info npxm8xx_adc_info = { + .data_mask =GENMASK (11 ,0 ), + .internal_vref =1229 , + .res_bits =12 , +};#define NPCM_ADC_CHAN (ch) { \ .type = IIO_VOLTAGE, \
@@ -129,7 +144,8 @@ static int npcm_adc_read(struct npcm_adc *info, int *val, u8 channel)if (ret <0 )return ret; - *val =NPCM_ADC_DATA_MASK (ioread32 (info->regs +NPCM_ADCDATA )); + *val =ioread32 (info->regs +NPCM_ADCDATA ); + *val &= info->data->data_mask;return 0 ; }
@@ -157,9 +173,9 @@ static int npcm_adc_read_raw(struct iio_dev *indio_dev, vref_uv =regulator_get_voltage (info->vref); *val = vref_uv /1000 ; }else { - *val =NPCM_INT_VREF_MV ; + *val = info->data->internal_vref; } - *val2 =NPCM_RESOLUTION_BITS ; + *val2 = info->data->res_bits;return IIO_VAL_FRACTIONAL_LOG2 ;case IIO_CHAN_INFO_SAMP_FREQ : *val = info->adc_sample_hz;
@@ -176,7 +192,8 @@ static const struct iio_info npcm_adc_iio_info = { };static const struct of_device_id npcm_adc_match[] = { - { .compatible ="nuvoton,npcm750-adc" , }, + { .compatible ="nuvoton,npcm750-adc" , .data = &npxm7xx_adc_info}, + { .compatible ="nuvoton,npcm845-adc" , .data = &npxm8xx_adc_info}, {/* sentinel */ } };MODULE_DEVICE_TABLE (of, npcm_adc_match);
@@ -196,6 +213,10 @@ static int npcm_adc_probe(struct platform_device *pdev)return -ENOMEM ; info =iio_priv (indio_dev); + info->data = (struct npcm_adc_info *)device_get_match_data (dev); +if (!info->data) +return -EINVAL ; +mutex_init (&info->lock); info->dev = &pdev->dev;
Signature · 1 line
2.33.0
Re: [PATCH v2 2/2] iio: adc: npcm: Add NPCM8XX support
Quoted 7 lines · Tomer Maimon
Adding ADC NPCM8XX support to NPCM ADC driver.
ADC NPCM8XX uses a different resolution and voltage reference.As part of adding NPCM8XX support:
- Add NPCM8XX specific compatible string.
- Add data to handle architecture-specific ADC parameters.
...
Quoted 1 line
+ struct
npcm_adc_info*data;
Can it be const?
...
Quoted 1 line
+
info->data= (structnpcm_adc_info*)device_get_match_data(dev);
...and hence no dropping qualifier is needed here, i.e. remove the casting.
Signature · 2 lines
With Best Regards, Andy Shevchenko