void max14577_muic_shutdown(struct device *dev) { struct max14577_muic_data *muic_data = dev_get_drvdata(dev); struct max14577_dev *max14577; int ret; u8 val; pr_info("%s:%s +\n", MUIC_DEV_NAME, __func__); if (!muic_data->i2c) { pr_err("%s:%s no muic i2c client\n", MUIC_DEV_NAME, __func__); return; } max14577 = i2c_get_clientdata(muic_data->i2c); pr_info("%s:%s max14577->i2c_lock.count.counter=%d\n", MUIC_DEV_NAME, __func__, max14577->i2c_lock.count.counter); pr_info("%s:%s JIGSet: auto detection\n", MUIC_DEV_NAME, __func__); val = (0 << CTRL3_JIGSET_SHIFT) | (0 << CTRL3_BOOTSET_SHIFT); ret = max14577_update_reg(muic_data->i2c, MAX14577_MUIC_REG_CONTROL3, val, CTRL3_JIGSET_MASK | CTRL3_BOOTSET_MASK); if (ret < 0) { pr_err("%s:%s fail to update reg\n", MUIC_DEV_NAME, __func__); return; } pr_info("%s:%s -\n", MUIC_DEV_NAME, __func__); }
/* * max14577_muic_set_debounce_time - Set the debounce time of ADC * @info: the instance including private data of max14577 MUIC * @time: the debounce time of ADC */ static int max14577_muic_set_debounce_time(struct max14577_muic_info *info, enum max14577_muic_adc_debounce_time time) { u8 ret; switch (time) { case ADC_DEBOUNCE_TIME_5MS: case ADC_DEBOUNCE_TIME_10MS: case ADC_DEBOUNCE_TIME_25MS: case ADC_DEBOUNCE_TIME_38_62MS: ret = max14577_update_reg(info->max14577->regmap, MAX14577_MUIC_REG_CONTROL3, CTRL3_ADCDBSET_MASK, time << CTRL3_ADCDBSET_SHIFT); if (ret) { dev_err(info->dev, "failed to set ADC debounce time\n"); return ret; } break; default: dev_err(info->dev, "invalid ADC debounce time\n"); return -EINVAL; } return 0; };
/* * max14577_muic_set_path - Set hardware line according to attached cable * @info: the instance including private data of max14577 MUIC * @value: the path according to attached cable * @attached: the state of cable (true:attached, false:detached) * * The max14577 MUIC device share outside H/W line among a varity of cables * so, this function set internal path of H/W line according to the type of * attached cable. */ static int max14577_muic_set_path(struct max14577_muic_info *info, u8 val, bool attached) { int ret = 0; u8 ctrl1, ctrl2 = 0; /* Set open state to path before changing hw path */ ret = max14577_update_reg(info->max14577->regmap, MAX14577_MUIC_REG_CONTROL1, CLEAR_IDBEN_MICEN_MASK, CTRL1_SW_OPEN); if (ret < 0) { dev_err(info->dev, "failed to update MUIC register\n"); return ret; } if (attached) ctrl1 = val; else ctrl1 = CTRL1_SW_OPEN; ret = max14577_update_reg(info->max14577->regmap, MAX14577_MUIC_REG_CONTROL1, CLEAR_IDBEN_MICEN_MASK, ctrl1); if (ret < 0) { dev_err(info->dev, "failed to update MUIC register\n"); return ret; } if (attached) ctrl2 |= CTRL2_CPEN_MASK; /* LowPwr=0, CPEn=1 */ else ctrl2 |= CTRL2_LOWPWR_MASK; /* LowPwr=1, CPEn=0 */ ret = max14577_update_reg(info->max14577->regmap, MAX14577_REG_CONTROL2, CTRL2_LOWPWR_MASK | CTRL2_CPEN_MASK, ctrl2); if (ret < 0) { dev_err(info->dev, "failed to update MUIC register\n"); return ret; } dev_dbg(info->dev, "CONTROL1 : 0x%02x, CONTROL2 : 0x%02x, state : %s\n", ctrl1, ctrl2, attached ? "attached" : "detached"); return 0; }