iio: adc: aspeed: Keep model data to driver data.
authorBilly Tsai <billy_tsai@aspeedtech.com>
Wed, 22 Sep 2021 08:15:10 +0000 (16:15 +0800)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 19 Oct 2021 07:27:32 +0000 (08:27 +0100)
Keep the model data pointer to driver data for reducing the usage of
of_device_get_match_data().

Signed-off-by: Billy Tsai <billy_tsai@aspeedtech.com>
Link: https://lore.kernel.org/r/20210922081520.30580-2-billy_tsai@aspeedtech.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/aspeed_adc.c

index d893151efd2f95987f9c3e926881f73497877dd8..d41fd3166e6ba2e2a3ba157f467a750bf0766f18 100644 (file)
@@ -77,6 +77,7 @@ struct aspeed_adc_model_data {
 
 struct aspeed_adc_data {
        struct device           *dev;
+       const struct aspeed_adc_model_data *model_data;
        void __iomem            *base;
        spinlock_t              clk_lock;
        struct clk_hw           *clk_prescaler;
@@ -118,8 +119,6 @@ static int aspeed_adc_read_raw(struct iio_dev *indio_dev,
                               int *val, int *val2, long mask)
 {
        struct aspeed_adc_data *data = iio_priv(indio_dev);
-       const struct aspeed_adc_model_data *model_data =
-                       of_device_get_match_data(data->dev);
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
@@ -127,7 +126,7 @@ static int aspeed_adc_read_raw(struct iio_dev *indio_dev,
                return IIO_VAL_INT;
 
        case IIO_CHAN_INFO_SCALE:
-               *val = model_data->vref_voltage;
+               *val = data->model_data->vref_voltage;
                *val2 = ASPEED_RESOLUTION_BITS;
                return IIO_VAL_FRACTIONAL_LOG2;
 
@@ -146,13 +145,11 @@ static int aspeed_adc_write_raw(struct iio_dev *indio_dev,
                                int val, int val2, long mask)
 {
        struct aspeed_adc_data *data = iio_priv(indio_dev);
-       const struct aspeed_adc_model_data *model_data =
-                       of_device_get_match_data(data->dev);
 
        switch (mask) {
        case IIO_CHAN_INFO_SAMP_FREQ:
-               if (val < model_data->min_sampling_rate ||
-                       val > model_data->max_sampling_rate)
+               if (val < data->model_data->min_sampling_rate ||
+                       val > data->model_data->max_sampling_rate)
                        return -EINVAL;
 
                clk_set_rate(data->clk_scaler->clk,
@@ -198,7 +195,6 @@ static int aspeed_adc_probe(struct platform_device *pdev)
 {
        struct iio_dev *indio_dev;
        struct aspeed_adc_data *data;
-       const struct aspeed_adc_model_data *model_data;
        const char *clk_parent_name;
        int ret;
        u32 adc_engine_control_reg_val;
@@ -209,6 +205,7 @@ static int aspeed_adc_probe(struct platform_device *pdev)
 
        data = iio_priv(indio_dev);
        data->dev = &pdev->dev;
+       data->model_data = of_device_get_match_data(&pdev->dev);
 
        data->base = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(data->base))
@@ -248,9 +245,7 @@ static int aspeed_adc_probe(struct platform_device *pdev)
        }
        reset_control_deassert(data->rst);
 
-       model_data = of_device_get_match_data(&pdev->dev);
-
-       if (model_data->wait_init_sequence) {
+       if (data->model_data->wait_init_sequence) {
                /* Enable engine in normal mode. */
                writel(FIELD_PREP(ASPEED_ADC_OP_MODE,
                                  ASPEED_ADC_OP_MODE_NORMAL) |
@@ -280,8 +275,7 @@ static int aspeed_adc_probe(struct platform_device *pdev)
        writel(adc_engine_control_reg_val,
               data->base + ASPEED_REG_ENGINE_CONTROL);
 
-       model_data = of_device_get_match_data(&pdev->dev);
-       indio_dev->name = model_data->model_name;
+       indio_dev->name = data->model_data->model_name;
        indio_dev->info = &aspeed_adc_iio_info;
        indio_dev->modes = INDIO_DIRECT_MODE;
        indio_dev->channels = aspeed_adc_iio_channels;