static int rt5025_exttemp_alert_switch(struct rt5025_swjeita_info *swji, int onoff) { if (!onoff) { rt5025_clr_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMXEN_MASK); rt5025_clr_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMNEN_MASK); } else { switch (swji->cur_section) { case 0: rt5025_set_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMNEN_MASK); break; case 1: rt5025_set_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMXEN_MASK); rt5025_set_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMNEN_MASK); break; case 2: rt5025_set_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMXEN_MASK); rt5025_set_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMNEN_MASK); break; case 3: rt5025_set_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMXEN_MASK); rt5025_set_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMNEN_MASK); break; case 4: rt5025_set_bits(swji->i2c, RT5025_REG_IRQCTL, RT5025_TMXEN_MASK); break; } } RTINFO("index=%d, onoff=%d\n", swji->cur_section, onoff); return 0; }
static int rt5025_disable(struct regulator_dev *rdev) { struct rt5025_regulator_info *info = rdev_get_drvdata(rdev); return rt5025_clr_bits(info->i2c, info->enable_reg, info->enable_bit); }
static int rt5025_set_charging_cc_switch (struct i2c_client *i2c, int onoff) { int ret; RTINFO("onoff = %d\n", onoff); if (onoff) ret = rt5025_set_bits(i2c, RT5025_REG_CHGCTL7, RT5025_CHGCCEN_MASK); else ret = rt5025_clr_bits(i2c, RT5025_REG_CHGCTL7, RT5025_CHGCCEN_MASK); return ret; }
static inline int rt5025_set_intadc_onoff(struct rt5025_swjeita_info *swji, int enable) { int ret; RTINFO("enable = %d\n", enable); if (enable) ret = rt5025_set_bits(swji->i2c, RT5025_REG_CHANNELL, RT5025_INTEN_MASK); else ret = rt5025_clr_bits(swji->i2c, RT5025_REG_CHANNELL, RT5025_INTEN_MASK); return ret; }
static int rt5025_gpio_direction_output(struct gpio_chip *chip, unsigned offset, int value) { struct rt5025_gpio_info *gi = dev_get_drvdata(chip->dev); int gpio_reg = 0; int ret = 0; ret = find_rt5025_gpioreg(offset, &gpio_reg); if (ret < 0) { dev_err(chip->dev, "not a valid gpio index\n"); return ret; } ret = rt5025_clr_bits(gi->i2c, gpio_reg, RT5025_GPIO_DIRSHIFT); if (ret < 0) { dev_err(chip->dev, "clr gpio direction fail\n"); return ret; } ret = rt5025_set_bits(gi->i2c, gpio_reg, RT5025_GPIO_OUTPUT<<RT5025_GPIO_DIRSHIFT); if (ret < 0) { dev_err(chip->dev, "set gpio output dir fail\n"); return ret; } if (value) ret = rt5025_set_bits(gi->i2c, gpio_reg, RT5025_GPIO_OVALUEMASK); else ret = rt5025_clr_bits(gi->i2c, gpio_reg, RT5025_GPIO_OVALUEMASK); if (ret < 0) { dev_err(chip->dev, "set gpio output value fail\n"); return ret; } return 0; }
static int rt5025_gpio_direction_input(struct gpio_chip *chip, unsigned offset) { struct rt5025_gpio_info *gi = dev_get_drvdata(chip->dev); int gpio_reg = 0; int ret = 0; ret = find_rt5025_gpioreg(offset , &gpio_reg); if (ret < 0) { dev_err(chip->dev, "not a valid gpio index\n"); return ret; } ret = rt5025_clr_bits(gi->i2c, gpio_reg, RT5025_GPIO_DIRMASK); if (ret < 0) { dev_err(chip->dev, "set gpio input fail\n"); return ret; } return 0; }
static void rt5025_gpio_set_value(struct gpio_chip *chip, unsigned offset, int value) { struct rt5025_gpio_info *gi = dev_get_drvdata(chip->dev); int gpio_reg = 0; int ret = 0; ret = find_rt5025_gpioreg(offset, &gpio_reg); if (ret < 0) { dev_err(chip->dev, "not a valid gpio index\n"); return; } if (value) ret = rt5025_set_bits(gi->i2c, gpio_reg, RT5025_GPIO_OVALUEMASK); else ret = rt5025_clr_bits(gi->i2c, gpio_reg, RT5025_GPIO_OVALUEMASK); if (ret < 0) dev_err(chip->dev, "read gpio register fail\n"); }
static int rt5025_set_mode(struct regulator_dev *rdev, unsigned int mode) { struct rt5025_regulator_info *info = rdev_get_drvdata(rdev); int ret; if (!info->mode_bit) { ret = 0; } else { switch (mode) { case REGULATOR_MODE_NORMAL: ret = rt5025_set_bits(info->i2c, info->mode_reg, info->mode_bit); break; case REGULATOR_MODE_FAST: ret = rt5025_clr_bits(info->i2c, info->mode_reg, info->mode_bit); break; default: ret = -EINVAL; break; } } return ret; }