}
 };
 
-static int max8998_i2c_device_read(struct max8998_dev *max8998, u8 reg, u8 *dest)
+int max8998_read_reg(struct i2c_client *i2c, u8 reg, u8 *dest)
 {
-       struct i2c_client *client = max8998->i2c_client;
+       struct max8998_dev *max8998 = i2c_get_clientdata(i2c);
        int ret;
 
        mutex_lock(&max8998->iolock);
-       ret = i2c_smbus_read_byte_data(client, reg);
+       ret = i2c_smbus_read_byte_data(i2c, reg);
        mutex_unlock(&max8998->iolock);
        if (ret < 0)
                return ret;
        *dest = ret;
        return 0;
 }
+EXPORT_SYMBOL(max8998_read_reg);
 
-static int max8998_i2c_device_write(struct max8998_dev *max8998, u8 reg, u8 value)
+int max8998_write_reg(struct i2c_client *i2c, u8 reg, u8 value)
 {
-       struct i2c_client *client = max8998->i2c_client;
+       struct max8998_dev *max8998 = i2c_get_clientdata(i2c);
        int ret;
 
        mutex_lock(&max8998->iolock);
-       ret = i2c_smbus_write_byte_data(client, reg, value);
+       ret = i2c_smbus_write_byte_data(i2c, reg, value);
        mutex_unlock(&max8998->iolock);
        return ret;
 }
+EXPORT_SYMBOL(max8998_write_reg);
 
-static int max8998_i2c_device_update(struct max8998_dev *max8998, u8 reg,
-                                    u8 val, u8 mask)
+int max8998_update_reg(struct i2c_client *i2c, u8 reg, u8 val, u8 mask)
 {
-       struct i2c_client *client = max8998->i2c_client;
+       struct max8998_dev *max8998 = i2c_get_clientdata(i2c);
        int ret;
 
        mutex_lock(&max8998->iolock);
-       ret = i2c_smbus_read_byte_data(client, reg);
+       ret = i2c_smbus_read_byte_data(i2c, reg);
        if (ret >= 0) {
                u8 old_val = ret & 0xff;
                u8 new_val = (val & mask) | (old_val & (~mask));
-               ret = i2c_smbus_write_byte_data(client, reg, new_val);
+               ret = i2c_smbus_write_byte_data(i2c, reg, new_val);
                if (ret >= 0)
                        ret = 0;
        }
        mutex_unlock(&max8998->iolock);
        return ret;
 }
+EXPORT_SYMBOL(max8998_update_reg);
 
 static int max8998_i2c_probe(struct i2c_client *i2c,
                            const struct i2c_device_id *id)
 
        i2c_set_clientdata(i2c, max8998);
        max8998->dev = &i2c->dev;
-       max8998->i2c_client = i2c;
-       max8998->dev_read = max8998_i2c_device_read;
-       max8998->dev_write = max8998_i2c_device_write;
-       max8998->dev_update = max8998_i2c_device_update;
+       max8998->i2c = i2c;
        mutex_init(&max8998->iolock);
 
        ret = mfd_add_devices(max8998->dev, -1,
 
 static int max8998_ldo_is_enabled(struct regulator_dev *rdev)
 {
        struct max8998_data *max8998 = rdev_get_drvdata(rdev);
+       struct i2c_client *i2c = max8998->iodev->i2c;
        int ret, reg, shift = 8;
        u8 val;
 
        if (ret)
                return ret;
 
-       ret = max8998_read_reg(max8998->iodev, reg, &val);
+       ret = max8998_read_reg(i2c, reg, &val);
        if (ret)
                return ret;
 
 static int max8998_ldo_enable(struct regulator_dev *rdev)
 {
        struct max8998_data *max8998 = rdev_get_drvdata(rdev);
+       struct i2c_client *i2c = max8998->iodev->i2c;
        int reg, shift = 8, ret;
 
        ret = max8998_get_enable_register(rdev, ®, &shift);
        if (ret)
                return ret;
 
-       return max8998_update_reg(max8998->iodev, reg, 1<<shift, 1<<shift);
+       return max8998_update_reg(i2c, reg, 1<<shift, 1<<shift);
 }
 
 static int max8998_ldo_disable(struct regulator_dev *rdev)
 {
        struct max8998_data *max8998 = rdev_get_drvdata(rdev);
+       struct i2c_client *i2c = max8998->iodev->i2c;
        int reg, shift = 8, ret;
 
        ret = max8998_get_enable_register(rdev, ®, &shift);
        if (ret)
                return ret;
 
-       return max8998_update_reg(max8998->iodev, reg, 0, 1<<shift);
+       return max8998_update_reg(i2c, reg, 0, 1<<shift);
 }
 
 static int max8998_get_voltage_register(struct regulator_dev *rdev,
 static int max8998_get_voltage(struct regulator_dev *rdev)
 {
        struct max8998_data *max8998 = rdev_get_drvdata(rdev);
+       struct i2c_client *i2c = max8998->iodev->i2c;
        int reg, shift = 0, mask, ret;
        u8 val;
 
        if (ret)
                return ret;
 
-       ret = max8998_read_reg(max8998->iodev, reg, &val);
+       ret = max8998_read_reg(i2c, reg, &val);
        if (ret)
                return ret;
 
                                int min_uV, int max_uV)
 {
        struct max8998_data *max8998 = rdev_get_drvdata(rdev);
+       struct i2c_client *i2c = max8998->iodev->i2c;
        int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
        int previous_vol = 0;
        const struct voltage_map_desc *desc;
        /* wait for RAMP_UP_DELAY if rdev is BUCK1/2 and
         * ENRAMP is ON */
        if (ldo == MAX8998_BUCK1 || ldo == MAX8998_BUCK2) {
-               max8998_read_reg(max8998->iodev, MAX8998_REG_ONOFF4, &val);
+               max8998_read_reg(i2c, MAX8998_REG_ONOFF4, &val);
                if (val & (1 << 4)) {
                        en_ramp = true;
                        previous_vol = max8998_get_voltage(rdev);
                }
        }
 
-       ret = max8998_update_reg(max8998->iodev, reg, i<<shift, mask<<shift);
+       ret = max8998_update_reg(i2c, reg, i<<shift, mask<<shift);
 
        if (en_ramp == true) {
                int difference = desc->min + desc->step*i - previous_vol/1000;
 
 /**
  * struct max8998_dev - max8998 master device for sub-drivers
  * @dev: master device of the chip (can be used to access platform data)
- * @i2c_client: i2c client private data
- * @dev_read():        chip register read function
- * @dev_write(): chip register write function
- * @dev_update(): chip register update function
+ * @i2c: i2c client private data
  * @iolock: mutex for serializing io access
  */
 
 struct max8998_dev {
        struct device *dev;
-       struct i2c_client *i2c_client;
-       int (*dev_read)(struct max8998_dev *max8998, u8 reg, u8 *dest);
-       int (*dev_write)(struct max8998_dev *max8998, u8 reg, u8 val);
-       int (*dev_update)(struct max8998_dev *max8998, u8 reg, u8 val, u8 mask);
+       struct i2c_client *i2c;
        struct mutex iolock;
 };
 
-static inline int max8998_read_reg(struct max8998_dev *max8998, u8 reg,
-                                  u8 *value)
-{
-       return max8998->dev_read(max8998, reg, value);
-}
-
-static inline int max8998_write_reg(struct max8998_dev *max8998, u8 reg,
-                                   u8 value)
-{
-       return max8998->dev_write(max8998, reg, value);
-}
-
-static inline int max8998_update_reg(struct max8998_dev *max8998, u8 reg,
-                                    u8 value, u8 mask)
-{
-       return max8998->dev_update(max8998, reg, value, mask);
-}
+extern int max8998_read_reg(struct i2c_client *i2c, u8 reg, u8 *dest);
+extern int max8998_write_reg(struct i2c_client *i2c, u8 reg, u8 value);
+extern int max8998_update_reg(struct i2c_client *i2c, u8 reg, u8 val, u8 mask);
 
 #endif /*  __LINUX_MFD_MAX8998_PRIV_H */