]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
iio: imu: inv_mpu6050: Use regmap instead of i2c specific functions
authorAdriana Reus <adriana.reus@intel.com>
Fri, 12 Feb 2016 11:44:43 +0000 (13:44 +0200)
committerJonathan Cameron <jic23@kernel.org>
Sat, 13 Feb 2016 20:53:50 +0000 (20:53 +0000)
Use regmap instead of i2c specific functions.
This is in preparation of splitting this driver into core and
i2c specific functionality.

Signed-off-by: Adriana Reus <adriana.reus@intel.com>
Acked-by: Crt Mori <cmo@melexis.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/imu/inv_mpu6050/Kconfig
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c

index 48fbc0bc7e2a1d499015001bace2c46db2c8b440..f301f3a73ffa3a6af9de05c9c8aaa6cdf2da22fb 100644 (file)
@@ -8,6 +8,7 @@ config INV_MPU6050_IIO
        select IIO_BUFFER
        select IIO_TRIGGERED_BUFFER
        select I2C_MUX
        select IIO_BUFFER
        select IIO_TRIGGERED_BUFFER
        select I2C_MUX
+       select REGMAP_I2C
        help
          This driver supports the Invensense MPU6050 devices.
          This driver can also support MPU6500 in MPU6050 compatibility mode
        help
          This driver supports the Invensense MPU6050 devices.
          This driver can also support MPU6500 in MPU6050 compatibility mode
index 1121f4ee2914e4e58295588010c2b6218ad18d7b..151a3787993839cb3e5427a7f16c673567db8fe2 100644 (file)
 #include <linux/acpi.h>
 #include "inv_mpu_iio.h"
 
 #include <linux/acpi.h>
 #include "inv_mpu_iio.h"
 
+static const struct regmap_config inv_mpu_regmap_config = {
+       .reg_bits = 8,
+       .val_bits = 8,
+};
+
 /*
  * this is the gyro scale translated from dynamic range plus/minus
  * {250, 500, 1000, 2000} to rad/s
 /*
  * this is the gyro scale translated from dynamic range plus/minus
  * {250, 500, 1000, 2000} to rad/s
@@ -75,11 +80,6 @@ static const struct inv_mpu6050_hw hw_info[INV_NUM_PARTS] = {
        },
 };
 
        },
 };
 
-int inv_mpu6050_write_reg(struct inv_mpu6050_state *st, int reg, u8 d)
-{
-       return i2c_smbus_write_i2c_block_data(st->client, reg, 1, &d);
-}
-
 /*
  * The i2c read/write needs to happen in unlocked mode. As the parent
  * adapter is common. If we use locked versions, it will fail as
 /*
  * The i2c read/write needs to happen in unlocked mode. As the parent
  * adapter is common. If we use locked versions, it will fail as
@@ -159,16 +159,15 @@ static int inv_mpu6050_deselect_bypass(struct i2c_adapter *adap,
 
 int inv_mpu6050_switch_engine(struct inv_mpu6050_state *st, bool en, u32 mask)
 {
 
 int inv_mpu6050_switch_engine(struct inv_mpu6050_state *st, bool en, u32 mask)
 {
-       u8 d, mgmt_1;
+       unsigned int d, mgmt_1;
        int result;
 
        /* switch clock needs to be careful. Only when gyro is on, can
           clock source be switched to gyro. Otherwise, it must be set to
           internal clock */
        if (INV_MPU6050_BIT_PWR_GYRO_STBY == mask) {
        int result;
 
        /* switch clock needs to be careful. Only when gyro is on, can
           clock source be switched to gyro. Otherwise, it must be set to
           internal clock */
        if (INV_MPU6050_BIT_PWR_GYRO_STBY == mask) {
-               result = i2c_smbus_read_i2c_block_data(st->client,
-                                      st->reg->pwr_mgmt_1, 1, &mgmt_1);
-               if (result != 1)
+               result = regmap_read(st->map, st->reg->pwr_mgmt_1, &mgmt_1);
+               if (result)
                        return result;
 
                mgmt_1 &= ~INV_MPU6050_BIT_CLK_MASK;
                        return result;
 
                mgmt_1 &= ~INV_MPU6050_BIT_CLK_MASK;
@@ -178,20 +177,19 @@ int inv_mpu6050_switch_engine(struct inv_mpu6050_state *st, bool en, u32 mask)
                /* turning off gyro requires switch to internal clock first.
                   Then turn off gyro engine */
                mgmt_1 |= INV_CLK_INTERNAL;
                /* turning off gyro requires switch to internal clock first.
                   Then turn off gyro engine */
                mgmt_1 |= INV_CLK_INTERNAL;
-               result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_1, mgmt_1);
+               result = regmap_write(st->map, st->reg->pwr_mgmt_1, mgmt_1);
                if (result)
                        return result;
        }
 
                if (result)
                        return result;
        }
 
-       result = i2c_smbus_read_i2c_block_data(st->client,
-                                      st->reg->pwr_mgmt_2, 1, &d);
-       if (result != 1)
+       result = regmap_read(st->map, st->reg->pwr_mgmt_2, &d);
+       if (result)
                return result;
        if (en)
                d &= ~mask;
        else
                d |= mask;
                return result;
        if (en)
                d &= ~mask;
        else
                d |= mask;
-       result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_2, d);
+       result = regmap_write(st->map, st->reg->pwr_mgmt_2, d);
        if (result)
                return result;
 
        if (result)
                return result;
 
@@ -201,7 +199,7 @@ int inv_mpu6050_switch_engine(struct inv_mpu6050_state *st, bool en, u32 mask)
                if (INV_MPU6050_BIT_PWR_GYRO_STBY == mask) {
                        /* switch internal clock to PLL */
                        mgmt_1 |= INV_CLK_PLL;
                if (INV_MPU6050_BIT_PWR_GYRO_STBY == mask) {
                        /* switch internal clock to PLL */
                        mgmt_1 |= INV_CLK_PLL;
-                       result = inv_mpu6050_write_reg(st,
+                       result = regmap_write(st->map,
                                        st->reg->pwr_mgmt_1, mgmt_1);
                        if (result)
                                return result;
                                        st->reg->pwr_mgmt_1, mgmt_1);
                        if (result)
                                return result;
@@ -218,15 +216,14 @@ int inv_mpu6050_set_power_itg(struct inv_mpu6050_state *st, bool power_on)
        if (power_on) {
                /* Already under indio-dev->mlock mutex */
                if (!st->powerup_count)
        if (power_on) {
                /* Already under indio-dev->mlock mutex */
                if (!st->powerup_count)
-                       result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_1,
-                                                      0);
+                       result = regmap_write(st->map, st->reg->pwr_mgmt_1, 0);
                if (!result)
                        st->powerup_count++;
        } else {
                st->powerup_count--;
                if (!st->powerup_count)
                if (!result)
                        st->powerup_count++;
        } else {
                st->powerup_count--;
                if (!st->powerup_count)
-                       result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_1,
-                                                      INV_MPU6050_BIT_SLEEP);
+                       result = regmap_write(st->map, st->reg->pwr_mgmt_1,
+                                             INV_MPU6050_BIT_SLEEP);
        }
 
        if (result)
        }
 
        if (result)
@@ -257,22 +254,22 @@ static int inv_mpu6050_init_config(struct iio_dev *indio_dev)
        if (result)
                return result;
        d = (INV_MPU6050_FSR_2000DPS << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT);
        if (result)
                return result;
        d = (INV_MPU6050_FSR_2000DPS << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT);
-       result = inv_mpu6050_write_reg(st, st->reg->gyro_config, d);
+       result = regmap_write(st->map, st->reg->gyro_config, d);
        if (result)
                return result;
 
        d = INV_MPU6050_FILTER_20HZ;
        if (result)
                return result;
 
        d = INV_MPU6050_FILTER_20HZ;
-       result = inv_mpu6050_write_reg(st, st->reg->lpf, d);
+       result = regmap_write(st->map, st->reg->lpf, d);
        if (result)
                return result;
 
        d = INV_MPU6050_ONE_K_HZ / INV_MPU6050_INIT_FIFO_RATE - 1;
        if (result)
                return result;
 
        d = INV_MPU6050_ONE_K_HZ / INV_MPU6050_INIT_FIFO_RATE - 1;
-       result = inv_mpu6050_write_reg(st, st->reg->sample_rate_div, d);
+       result = regmap_write(st->map, st->reg->sample_rate_div, d);
        if (result)
                return result;
 
        d = (INV_MPU6050_FS_02G << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT);
        if (result)
                return result;
 
        d = (INV_MPU6050_FS_02G << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT);
-       result = inv_mpu6050_write_reg(st, st->reg->accl_config, d);
+       result = regmap_write(st->map, st->reg->accl_config, d);
        if (result)
                return result;
 
        if (result)
                return result;
 
@@ -290,9 +287,8 @@ static int inv_mpu6050_sensor_show(struct inv_mpu6050_state  *st, int reg,
        __be16 d;
 
        ind = (axis - IIO_MOD_X) * 2;
        __be16 d;
 
        ind = (axis - IIO_MOD_X) * 2;
-       result = i2c_smbus_read_i2c_block_data(st->client, reg + ind,  2,
-                                               (u8 *)&d);
-       if (result != 2)
+       result = regmap_bulk_read(st->map, reg + ind, (u8 *)&d, 2);
+       if (result)
                return -EINVAL;
        *val = (short)be16_to_cpup(&d);
 
                return -EINVAL;
        *val = (short)be16_to_cpup(&d);
 
@@ -418,8 +414,7 @@ static int inv_mpu6050_write_gyro_scale(struct inv_mpu6050_state *st, int val)
        for (i = 0; i < ARRAY_SIZE(gyro_scale_6050); ++i) {
                if (gyro_scale_6050[i] == val) {
                        d = (i << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT);
        for (i = 0; i < ARRAY_SIZE(gyro_scale_6050); ++i) {
                if (gyro_scale_6050[i] == val) {
                        d = (i << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT);
-                       result = inv_mpu6050_write_reg(st,
-                                       st->reg->gyro_config, d);
+                       result = regmap_write(st->map, st->reg->gyro_config, d);
                        if (result)
                                return result;
 
                        if (result)
                                return result;
 
@@ -456,8 +451,7 @@ static int inv_mpu6050_write_accel_scale(struct inv_mpu6050_state *st, int val)
        for (i = 0; i < ARRAY_SIZE(accel_scale); ++i) {
                if (accel_scale[i] == val) {
                        d = (i << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT);
        for (i = 0; i < ARRAY_SIZE(accel_scale); ++i) {
                if (accel_scale[i] == val) {
                        d = (i << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT);
-                       result = inv_mpu6050_write_reg(st,
-                                       st->reg->accl_config, d);
+                       result = regmap_write(st->map, st->reg->accl_config, d);
                        if (result)
                                return result;
 
                        if (result)
                                return result;
 
@@ -537,7 +531,7 @@ static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate)
        while ((h < hz[i]) && (i < ARRAY_SIZE(d) - 1))
                i++;
        data = d[i];
        while ((h < hz[i]) && (i < ARRAY_SIZE(d) - 1))
                i++;
        data = d[i];
-       result = inv_mpu6050_write_reg(st, st->reg->lpf, data);
+       result = regmap_write(st->map, st->reg->lpf, data);
        if (result)
                return result;
        st->chip_config.lpf = data;
        if (result)
                return result;
        st->chip_config.lpf = data;
@@ -575,7 +569,7 @@ static ssize_t inv_mpu6050_fifo_rate_store(struct device *dev,
                goto fifo_rate_fail;
 
        d = INV_MPU6050_ONE_K_HZ / fifo_rate - 1;
                goto fifo_rate_fail;
 
        d = INV_MPU6050_ONE_K_HZ / fifo_rate - 1;
-       result = inv_mpu6050_write_reg(st, st->reg->sample_rate_div, d);
+       result = regmap_write(st->map, st->reg->sample_rate_div, d);
        if (result)
                goto fifo_rate_fail;
        st->chip_config.fifo_rate = fifo_rate;
        if (result)
                goto fifo_rate_fail;
        st->chip_config.fifo_rate = fifo_rate;
@@ -736,8 +730,8 @@ static int inv_check_and_setup_chip(struct inv_mpu6050_state *st)
        st->reg = hw_info[st->chip_type].reg;
 
        /* reset to make sure previous state are not there */
        st->reg = hw_info[st->chip_type].reg;
 
        /* reset to make sure previous state are not there */
-       result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_1,
-                                       INV_MPU6050_BIT_H_RESET);
+       result = regmap_write(st->map, st->reg->pwr_mgmt_1,
+                             INV_MPU6050_BIT_H_RESET);
        if (result)
                return result;
        msleep(INV_MPU6050_POWER_UP_TIME);
        if (result)
                return result;
        msleep(INV_MPU6050_POWER_UP_TIME);
@@ -778,11 +772,19 @@ static int inv_mpu_probe(struct i2c_client *client,
        struct iio_dev *indio_dev;
        struct inv_mpu6050_platform_data *pdata;
        int result;
        struct iio_dev *indio_dev;
        struct inv_mpu6050_platform_data *pdata;
        int result;
+       struct regmap *regmap;
 
        if (!i2c_check_functionality(client->adapter,
                I2C_FUNC_SMBUS_I2C_BLOCK))
                return -ENOSYS;
 
 
        if (!i2c_check_functionality(client->adapter,
                I2C_FUNC_SMBUS_I2C_BLOCK))
                return -ENOSYS;
 
+       regmap = devm_regmap_init_i2c(client, &inv_mpu_regmap_config);
+       if (IS_ERR(regmap)) {
+               dev_err(&client->dev, "Failed to register i2c regmap %d\n",
+                       (int)PTR_ERR(regmap));
+               return PTR_ERR(regmap);
+       }
+
        indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
        if (!indio_dev)
                return -ENOMEM;
        indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
        if (!indio_dev)
                return -ENOMEM;
@@ -790,6 +792,7 @@ static int inv_mpu_probe(struct i2c_client *client,
        st = iio_priv(indio_dev);
        st->client = client;
        st->powerup_count = 0;
        st = iio_priv(indio_dev);
        st->client = client;
        st->powerup_count = 0;
+       st->map = regmap;
        pdata = dev_get_platdata(&client->dev);
        if (pdata)
                st->plat_data = *pdata;
        pdata = dev_get_platdata(&client->dev);
        if (pdata)
                st->plat_data = *pdata;
index 455b99db64ba8a00b748e6c8d9b77a2c77dd9a57..469cd1f011def2a5c3ecf4f758cecc9a64dbb4c1 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/spinlock.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/buffer.h>
 #include <linux/spinlock.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/buffer.h>
+#include <linux/regmap.h>
 #include <linux/iio/sysfs.h>
 #include <linux/iio/kfifo_buf.h>
 #include <linux/iio/trigger.h>
 #include <linux/iio/sysfs.h>
 #include <linux/iio/kfifo_buf.h>
 #include <linux/iio/trigger.h>
@@ -125,6 +126,7 @@ struct inv_mpu6050_state {
        unsigned int powerup_count;
        struct inv_mpu6050_platform_data plat_data;
        DECLARE_KFIFO(timestamps, long long, TIMESTAMP_FIFO_SIZE);
        unsigned int powerup_count;
        struct inv_mpu6050_platform_data plat_data;
        DECLARE_KFIFO(timestamps, long long, TIMESTAMP_FIFO_SIZE);
+       struct regmap *map;
 };
 
 /*register and associated bit definition*/
 };
 
 /*register and associated bit definition*/
index ba27e277511fc52585f8fa25fd20d49bca61be96..eb19dae8dda7de730ee818edac5c18794b7480c5 100644 (file)
@@ -13,7 +13,6 @@
 
 #include <linux/module.h>
 #include <linux/slab.h>
 
 #include <linux/module.h>
 #include <linux/slab.h>
-#include <linux/i2c.h>
 #include <linux/err.h>
 #include <linux/delay.h>
 #include <linux/sysfs.h>
 #include <linux/err.h>
 #include <linux/delay.h>
 #include <linux/sysfs.h>
@@ -41,22 +40,22 @@ int inv_reset_fifo(struct iio_dev *indio_dev)
        struct inv_mpu6050_state  *st = iio_priv(indio_dev);
 
        /* disable interrupt */
        struct inv_mpu6050_state  *st = iio_priv(indio_dev);
 
        /* disable interrupt */
-       result = inv_mpu6050_write_reg(st, st->reg->int_enable, 0);
+       result = regmap_write(st->map, st->reg->int_enable, 0);
        if (result) {
                dev_err(&st->client->dev, "int_enable failed %d\n", result);
                return result;
        }
        /* disable the sensor output to FIFO */
        if (result) {
                dev_err(&st->client->dev, "int_enable failed %d\n", result);
                return result;
        }
        /* disable the sensor output to FIFO */
-       result = inv_mpu6050_write_reg(st, st->reg->fifo_en, 0);
+       result = regmap_write(st->map, st->reg->fifo_en, 0);
        if (result)
                goto reset_fifo_fail;
        /* disable fifo reading */
        if (result)
                goto reset_fifo_fail;
        /* disable fifo reading */
-       result = inv_mpu6050_write_reg(st, st->reg->user_ctrl, 0);
+       result = regmap_write(st->map, st->reg->user_ctrl, 0);
        if (result)
                goto reset_fifo_fail;
 
        /* reset FIFO*/
        if (result)
                goto reset_fifo_fail;
 
        /* reset FIFO*/
-       result = inv_mpu6050_write_reg(st, st->reg->user_ctrl,
+       result = regmap_write(st->map, st->reg->user_ctrl,
                                        INV_MPU6050_BIT_FIFO_RST);
        if (result)
                goto reset_fifo_fail;
                                        INV_MPU6050_BIT_FIFO_RST);
        if (result)
                goto reset_fifo_fail;
@@ -67,13 +66,13 @@ int inv_reset_fifo(struct iio_dev *indio_dev)
        /* enable interrupt */
        if (st->chip_config.accl_fifo_enable ||
            st->chip_config.gyro_fifo_enable) {
        /* enable interrupt */
        if (st->chip_config.accl_fifo_enable ||
            st->chip_config.gyro_fifo_enable) {
-               result = inv_mpu6050_write_reg(st, st->reg->int_enable,
+               result = regmap_write(st->map, st->reg->int_enable,
                                        INV_MPU6050_BIT_DATA_RDY_EN);
                if (result)
                        return result;
        }
        /* enable FIFO reading and I2C master interface*/
                                        INV_MPU6050_BIT_DATA_RDY_EN);
                if (result)
                        return result;
        }
        /* enable FIFO reading and I2C master interface*/
-       result = inv_mpu6050_write_reg(st, st->reg->user_ctrl,
+       result = regmap_write(st->map, st->reg->user_ctrl,
                                        INV_MPU6050_BIT_FIFO_EN);
        if (result)
                goto reset_fifo_fail;
                                        INV_MPU6050_BIT_FIFO_EN);
        if (result)
                goto reset_fifo_fail;
@@ -83,7 +82,7 @@ int inv_reset_fifo(struct iio_dev *indio_dev)
                d |= INV_MPU6050_BITS_GYRO_OUT;
        if (st->chip_config.accl_fifo_enable)
                d |= INV_MPU6050_BIT_ACCEL_OUT;
                d |= INV_MPU6050_BITS_GYRO_OUT;
        if (st->chip_config.accl_fifo_enable)
                d |= INV_MPU6050_BIT_ACCEL_OUT;
-       result = inv_mpu6050_write_reg(st, st->reg->fifo_en, d);
+       result = regmap_write(st->map, st->reg->fifo_en, d);
        if (result)
                goto reset_fifo_fail;
 
        if (result)
                goto reset_fifo_fail;
 
@@ -91,7 +90,7 @@ int inv_reset_fifo(struct iio_dev *indio_dev)
 
 reset_fifo_fail:
        dev_err(&st->client->dev, "reset fifo failed %d\n", result);
 
 reset_fifo_fail:
        dev_err(&st->client->dev, "reset fifo failed %d\n", result);
-       result = inv_mpu6050_write_reg(st, st->reg->int_enable,
+       result = regmap_write(st->map, st->reg->int_enable,
                                        INV_MPU6050_BIT_DATA_RDY_EN);
 
        return result;
                                        INV_MPU6050_BIT_DATA_RDY_EN);
 
        return result;
@@ -143,10 +142,10 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
         * read fifo_count register to know how many bytes inside FIFO
         * right now
         */
         * read fifo_count register to know how many bytes inside FIFO
         * right now
         */
-       result = i2c_smbus_read_i2c_block_data(st->client,
+       result = regmap_bulk_read(st->map,
                                       st->reg->fifo_count_h,
                                       st->reg->fifo_count_h,
-                                      INV_MPU6050_FIFO_COUNT_BYTE, data);
-       if (result != INV_MPU6050_FIFO_COUNT_BYTE)
+                                      data, INV_MPU6050_FIFO_COUNT_BYTE);
+       if (result)
                goto end_session;
        fifo_count = be16_to_cpup((__be16 *)(&data[0]));
        if (fifo_count < bytes_per_datum)
                goto end_session;
        fifo_count = be16_to_cpup((__be16 *)(&data[0]));
        if (fifo_count < bytes_per_datum)
@@ -161,10 +160,9 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
                fifo_count / bytes_per_datum + INV_MPU6050_TIME_STAMP_TOR)
                        goto flush_fifo;
        while (fifo_count >= bytes_per_datum) {
                fifo_count / bytes_per_datum + INV_MPU6050_TIME_STAMP_TOR)
                        goto flush_fifo;
        while (fifo_count >= bytes_per_datum) {
-               result = i2c_smbus_read_i2c_block_data(st->client,
-                                                      st->reg->fifo_r_w,
-                                                      bytes_per_datum, data);
-               if (result != bytes_per_datum)
+               result = regmap_bulk_read(st->map, st->reg->fifo_r_w,
+                                         data, bytes_per_datum);
+               if (result)
                        goto flush_fifo;
 
                result = kfifo_out(&st->timestamps, &timestamp, 1);
                        goto flush_fifo;
 
                result = kfifo_out(&st->timestamps, &timestamp, 1);
index 844610c3a3a9bf24c238007cd2c9edfe3ca2940d..ee9e66dc5350105f39fa63c2a5a6cdc9fc47d5b7 100644 (file)
@@ -65,15 +65,15 @@ static int inv_mpu6050_set_enable(struct iio_dev *indio_dev, bool enable)
                if (result)
                        return result;
        } else {
                if (result)
                        return result;
        } else {
-               result = inv_mpu6050_write_reg(st, st->reg->fifo_en, 0);
+               result = regmap_write(st->map, st->reg->fifo_en, 0);
                if (result)
                        return result;
 
                if (result)
                        return result;
 
-               result = inv_mpu6050_write_reg(st, st->reg->int_enable, 0);
+               result = regmap_write(st->map, st->reg->int_enable, 0);
                if (result)
                        return result;
 
                if (result)
                        return result;
 
-               result = inv_mpu6050_write_reg(st, st->reg->user_ctrl, 0);
+               result = regmap_write(st->map, st->reg->user_ctrl, 0);
                if (result)
                        return result;
 
                if (result)
                        return result;