lkml.org 
[lkml]   [2019]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/5] iio: imu: adis16480: construct adis data on probe vs static on driver
    Date
    This change is done in preparation of adding an `struct adis_timeout` type.
    Some ADIS drivers support multiple drivers, with various combinations of
    timeouts. Creating static tables for each driver is possible, but that also
    creates quite a lot of duplication.

    Signed-off-by: Nuno Sá <nuno.sa@analog.com>
    Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
    ---
    drivers/iio/imu/adis16480.c | 61 ++++++++++++++++++++++---------------
    1 file changed, 37 insertions(+), 24 deletions(-)

    diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c
    index f73094e8d35d..1edfed83d480 100644
    --- a/drivers/iio/imu/adis16480.c
    +++ b/drivers/iio/imu/adis16480.c
    @@ -1022,29 +1022,6 @@ static const char * const adis16480_status_error_msgs[] = {
    [ADIS16480_DIAG_STAT_BARO_FAIL] = "Barometer self-test failure",
    };

    -static const struct adis_data adis16480_data = {
    - .diag_stat_reg = ADIS16480_REG_DIAG_STS,
    - .glob_cmd_reg = ADIS16480_REG_GLOB_CMD,
    - .has_paging = true,
    -
    - .read_delay = 5,
    - .write_delay = 5,
    -
    - .status_error_msgs = adis16480_status_error_msgs,
    - .status_error_mask = BIT(ADIS16480_DIAG_STAT_XGYRO_FAIL) |
    - BIT(ADIS16480_DIAG_STAT_YGYRO_FAIL) |
    - BIT(ADIS16480_DIAG_STAT_ZGYRO_FAIL) |
    - BIT(ADIS16480_DIAG_STAT_XACCL_FAIL) |
    - BIT(ADIS16480_DIAG_STAT_YACCL_FAIL) |
    - BIT(ADIS16480_DIAG_STAT_ZACCL_FAIL) |
    - BIT(ADIS16480_DIAG_STAT_XMAGN_FAIL) |
    - BIT(ADIS16480_DIAG_STAT_YMAGN_FAIL) |
    - BIT(ADIS16480_DIAG_STAT_ZMAGN_FAIL) |
    - BIT(ADIS16480_DIAG_STAT_BARO_FAIL),
    -
    - .enable_irq = adis16480_enable_irq,
    -};
    -
    static int adis16480_config_irq_pin(struct device_node *of_node,
    struct adis16480 *st)
    {
    @@ -1195,9 +1172,41 @@ static int adis16480_get_ext_clocks(struct adis16480 *st)
    return 0;
    }

    +static struct adis_data *adis16480_adis_data_alloc(struct adis16480 *st,
    + struct device *dev)
    +{
    + struct adis_data *data;
    +
    + data = devm_kzalloc(dev, sizeof(struct adis_data), GFP_KERNEL);
    + if (!data)
    + return ERR_PTR(-ENOMEM);
    +
    + data->glob_cmd_reg = ADIS16480_REG_GLOB_CMD;
    + data->diag_stat_reg = ADIS16480_REG_DIAG_STS;
    + data->has_paging = true;
    + data->self_test_mask = BIT(1);
    + data->read_delay = 5;
    + data->write_delay = 5;
    + data->status_error_msgs = adis16480_status_error_msgs;
    + data->status_error_mask = BIT(ADIS16480_DIAG_STAT_XGYRO_FAIL) |
    + BIT(ADIS16480_DIAG_STAT_YGYRO_FAIL) |
    + BIT(ADIS16480_DIAG_STAT_ZGYRO_FAIL) |
    + BIT(ADIS16480_DIAG_STAT_XACCL_FAIL) |
    + BIT(ADIS16480_DIAG_STAT_YACCL_FAIL) |
    + BIT(ADIS16480_DIAG_STAT_ZACCL_FAIL) |
    + BIT(ADIS16480_DIAG_STAT_XMAGN_FAIL) |
    + BIT(ADIS16480_DIAG_STAT_YMAGN_FAIL) |
    + BIT(ADIS16480_DIAG_STAT_ZMAGN_FAIL) |
    + BIT(ADIS16480_DIAG_STAT_BARO_FAIL);
    + data->enable_irq = adis16480_enable_irq;
    +
    + return data;
    +}
    +
    static int adis16480_probe(struct spi_device *spi)
    {
    const struct spi_device_id *id = spi_get_device_id(spi);
    + const struct adis_data *adis16480_data;
    struct iio_dev *indio_dev;
    struct adis16480 *st;
    int ret;
    @@ -1218,7 +1227,11 @@ static int adis16480_probe(struct spi_device *spi)
    indio_dev->info = &adis16480_info;
    indio_dev->modes = INDIO_DIRECT_MODE;

    - ret = adis_init(&st->adis, indio_dev, spi, &adis16480_data);
    + adis16480_data = adis16480_adis_data_alloc(st, &spi->dev);
    + if (IS_ERR(adis16480_data))
    + return PTR_ERR(adis16480_data);
    +
    + ret = adis_init(&st->adis, indio_dev, spi, adis16480_data);
    if (ret)
    return ret;

    --
    2.20.1
    \
     
     \ /
      Last update: 2019-12-13 17:06    [W:2.291 / U:1.956 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site