Skip to content

Commit

Permalink
iio: adc: aspeed: Restructure the model data
Browse files Browse the repository at this point in the history
This patch refactors the model data structure to distinguish the
function form different versions of aspeed ADC.
- Rename the vref_voltage to vref_fixed_mv and add vref_mv driver data
When driver probe will check vref_fixed_mv value and store it to vref_mv
which isn't const value.
- Add num_channels
Make num_channles of iio device can be changed by different model_data
- Add need_prescaler flag and scaler_bit_width
The need_prescaler flag is used to tell the driver the clock divider needs
another Prescaler and the scaler_bit_width to set the clock divider
bitfield width.

Signed-off-by: Billy Tsai <billy_tsai@aspeedtech.com>
Link: https://lore.kernel.org/r/20210922081520.30580-3-billy_tsai@aspeedtech.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
  • Loading branch information
Billy Tsai authored and Jonathan Cameron committed Oct 19, 2021
1 parent 89c6541 commit eaa74a8
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions drivers/iio/adc/aspeed_adc.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,11 @@ struct aspeed_adc_model_data {
const char *model_name;
unsigned int min_sampling_rate; // Hz
unsigned int max_sampling_rate; // Hz
unsigned int vref_voltage; // mV
unsigned int vref_fixed_mv;
bool wait_init_sequence;
bool need_prescaler;
u8 scaler_bit_width;
unsigned int num_channels;
};

struct aspeed_adc_data {
Expand All @@ -83,6 +86,7 @@ struct aspeed_adc_data {
struct clk_hw *clk_prescaler;
struct clk_hw *clk_scaler;
struct reset_control *rst;
int vref_mv;
};

#define ASPEED_CHAN(_idx, _data_reg_addr) { \
Expand Down Expand Up @@ -126,7 +130,7 @@ static int aspeed_adc_read_raw(struct iio_dev *indio_dev,
return IIO_VAL_INT;

case IIO_CHAN_INFO_SCALE:
*val = data->model_data->vref_voltage;
*val = data->model_data->vref_fixed_mv;
*val2 = ASPEED_RESOLUTION_BITS;
return IIO_VAL_FRACTIONAL_LOG2;

Expand Down Expand Up @@ -279,7 +283,7 @@ static int aspeed_adc_probe(struct platform_device *pdev)
indio_dev->info = &aspeed_adc_iio_info;
indio_dev->modes = INDIO_DIRECT_MODE;
indio_dev->channels = aspeed_adc_iio_channels;
indio_dev->num_channels = ARRAY_SIZE(aspeed_adc_iio_channels);
indio_dev->num_channels = data->model_data->num_channels;

ret = iio_device_register(indio_dev);
if (ret)
Expand Down Expand Up @@ -319,17 +323,23 @@ static int aspeed_adc_remove(struct platform_device *pdev)

static const struct aspeed_adc_model_data ast2400_model_data = {
.model_name = "ast2400-adc",
.vref_voltage = 2500, // mV
.vref_fixed_mv = 2500,
.min_sampling_rate = 10000,
.max_sampling_rate = 500000,
.need_prescaler = true,
.scaler_bit_width = 10,
.num_channels = 16,
};

static const struct aspeed_adc_model_data ast2500_model_data = {
.model_name = "ast2500-adc",
.vref_voltage = 1800, // mV
.vref_fixed_mv = 1800,
.min_sampling_rate = 1,
.max_sampling_rate = 1000000,
.wait_init_sequence = true,
.need_prescaler = true,
.scaler_bit_width = 10,
.num_channels = 16,
};

static const struct of_device_id aspeed_adc_matches[] = {
Expand Down

0 comments on commit eaa74a8

Please sign in to comment.