Lines Matching refs:sc

777 static int __sc8551_read_byte(struct sc8551 *sc, u8 reg, u8 *data)  in __sc8551_read_byte()  argument
781 ret = i2c_smbus_read_byte_data(sc->client, reg); in __sc8551_read_byte()
783 dev_err(sc->dev, "i2c read fail: can't read from reg 0x%02X\n", reg); in __sc8551_read_byte()
792 static int __sc8551_write_byte(struct sc8551 *sc, int reg, u8 val) in __sc8551_write_byte() argument
796 ret = i2c_smbus_write_byte_data(sc->client, reg, val); in __sc8551_write_byte()
798 dev_err(sc->dev, "i2c write fail: can't write 0x%02X to reg 0x%02X: %d\n", in __sc8551_write_byte()
805 static int sc8551_read_byte(struct sc8551 *sc, u8 reg, u8 *data) in sc8551_read_byte() argument
809 mutex_lock(&sc->i2c_rw_lock); in sc8551_read_byte()
810 ret = __sc8551_read_byte(sc, reg, data); in sc8551_read_byte()
811 mutex_unlock(&sc->i2c_rw_lock); in sc8551_read_byte()
816 static int sc8551_write_byte(struct sc8551 *sc, u8 reg, u8 data) in sc8551_write_byte() argument
820 mutex_lock(&sc->i2c_rw_lock); in sc8551_write_byte()
821 ret = __sc8551_write_byte(sc, reg, data); in sc8551_write_byte()
822 mutex_unlock(&sc->i2c_rw_lock); in sc8551_write_byte()
827 static int sc8551_update_bits(struct sc8551 *sc, in sc8551_update_bits() argument
835 mutex_lock(&sc->i2c_rw_lock); in sc8551_update_bits()
836 ret = __sc8551_read_byte(sc, reg, &tmp); in sc8551_update_bits()
838 dev_err(sc->dev, "Failed: reg=%02X, ret=%d\n", reg, ret); in sc8551_update_bits()
845 ret = __sc8551_write_byte(sc, reg, tmp); in sc8551_update_bits()
847 dev_err(sc->dev, "Failed: reg=%02X, ret=%d\n", reg, ret); in sc8551_update_bits()
850 mutex_unlock(&sc->i2c_rw_lock); in sc8551_update_bits()
854 static int sc8551_enable_charge(struct sc8551 *sc, bool enable) in sc8551_enable_charge() argument
866 ret = sc8551_update_bits(sc, in sc8551_enable_charge()
874 static int sc8551_check_charge_enabled(struct sc8551 *sc, bool *enabled) in sc8551_check_charge_enabled() argument
879 ret = sc8551_read_byte(sc, SC8551_REG_0C, &val); in sc8551_check_charge_enabled()
886 static int sc8551_enable_wdt(struct sc8551 *sc, bool enable) in sc8551_enable_wdt() argument
898 ret = sc8551_update_bits(sc, in sc8551_enable_wdt()
905 static int sc8551_set_wdt(struct sc8551 *sc, int ms) in sc8551_set_wdt() argument
923 ret = sc8551_update_bits(sc, in sc8551_set_wdt()
930 static int sc8551_enable_batovp(struct sc8551 *sc, bool enable) in sc8551_enable_batovp() argument
942 ret = sc8551_update_bits(sc, in sc8551_enable_batovp()
949 static int sc8551_set_batovp_th(struct sc8551 *sc, int threshold) in sc8551_set_batovp_th() argument
961 ret = sc8551_update_bits(sc, in sc8551_set_batovp_th()
968 static int sc8551_enable_batocp(struct sc8551 *sc, bool enable) in sc8551_enable_batocp() argument
980 ret = sc8551_update_bits(sc, in sc8551_enable_batocp()
987 static int sc8551_set_batocp_th(struct sc8551 *sc, int threshold) in sc8551_set_batocp_th() argument
999 ret = sc8551_update_bits(sc, in sc8551_set_batocp_th()
1006 static int sc8551_set_busovp_th(struct sc8551 *sc, int threshold) in sc8551_set_busovp_th() argument
1018 ret = sc8551_update_bits(sc, in sc8551_set_busovp_th()
1025 static int sc8551_enable_busocp(struct sc8551 *sc, bool enable) in sc8551_enable_busocp() argument
1037 ret = sc8551_update_bits(sc, in sc8551_enable_busocp()
1044 static int sc8551_set_busocp_th(struct sc8551 *sc, int threshold) in sc8551_set_busocp_th() argument
1056 ret = sc8551_update_bits(sc, in sc8551_set_busocp_th()
1063 static int sc8551_set_acovp_th(struct sc8551 *sc, int threshold) in sc8551_set_acovp_th() argument
1078 ret = sc8551_update_bits(sc, SC8551_REG_05, in sc8551_set_acovp_th()
1085 static int sc8551_set_vdrop_th(struct sc8551 *sc, int threshold) in sc8551_set_vdrop_th() argument
1097 ret = sc8551_update_bits(sc, SC8551_REG_05, in sc8551_set_vdrop_th()
1104 static int sc8551_set_vdrop_deglitch(struct sc8551 *sc, int us) in sc8551_set_vdrop_deglitch() argument
1116 ret = sc8551_update_bits(sc, in sc8551_set_vdrop_deglitch()
1123 static int sc8551_enable_bat_therm(struct sc8551 *sc, bool enable) in sc8551_enable_bat_therm() argument
1135 ret = sc8551_update_bits(sc, SC8551_REG_0C, in sc8551_enable_bat_therm()
1140 static int sc8551_enable_bus_therm(struct sc8551 *sc, bool enable) in sc8551_enable_bus_therm() argument
1152 ret = sc8551_update_bits(sc, SC8551_REG_0C, in sc8551_enable_bus_therm()
1157 static int sc8551_enable_adc(struct sc8551 *sc, bool enable) in sc8551_enable_adc() argument
1169 ret = sc8551_update_bits(sc, SC8551_REG_14, in sc8551_enable_adc()
1174 static int sc8551_set_adc_scanrate(struct sc8551 *sc, bool oneshot) in sc8551_set_adc_scanrate() argument
1186 ret = sc8551_update_bits(sc, SC8551_REG_14, in sc8551_set_adc_scanrate()
1191 static int sc8551_get_adc_data(struct sc8551 *sc, int channel, int *result) in sc8551_get_adc_data() argument
1200 ret = sc8551_read_byte(sc, SC8551_REG_16 + (channel << 1), &val_h); in sc8551_get_adc_data()
1204 ret = sc8551_read_byte(sc, SC8551_REG_16 + (channel << 1) + 1, &val_l); in sc8551_get_adc_data()
1230 static int sc8551_set_adc_scan(struct sc8551 *sc, int channel, bool enable) in sc8551_set_adc_scan() argument
1256 ret = sc8551_update_bits(sc, reg, mask, val); in sc8551_set_adc_scan()
1261 static int sc8551_set_alarm_int_mask(struct sc8551 *sc, u8 mask) in sc8551_set_alarm_int_mask() argument
1266 ret = sc8551_read_byte(sc, SC8551_REG_0F, &val); in sc8551_set_alarm_int_mask()
1272 ret = sc8551_write_byte(sc, SC8551_REG_0F, val); in sc8551_set_alarm_int_mask()
1277 static int sc8551_set_sense_resistor(struct sc8551 *sc, int r_mohm) in sc8551_set_sense_resistor() argument
1291 ret = sc8551_update_bits(sc, in sc8551_set_sense_resistor()
1298 static int sc8551_enable_regulation(struct sc8551 *sc, bool enable) in sc8551_enable_regulation() argument
1310 ret = sc8551_update_bits(sc, in sc8551_enable_regulation()
1319 static int sc8551_set_ss_timeout(struct sc8551 *sc, int timeout) in sc8551_set_ss_timeout() argument
1356 ret = sc8551_update_bits(sc, in sc8551_set_ss_timeout()
1364 static int sc8551_set_ibat_reg_th(struct sc8551 *sc, int th_ma) in sc8551_set_ibat_reg_th() argument
1381 ret = sc8551_update_bits(sc, in sc8551_set_ibat_reg_th()
1389 static int sc8551_set_vbat_reg_th(struct sc8551 *sc, int th_mv) in sc8551_set_vbat_reg_th() argument
1405 ret = sc8551_update_bits(sc, SC8551_REG_2C, in sc8551_set_vbat_reg_th()
1412 static int sc8551_get_work_mode(struct sc8551 *sc, int *mode) in sc8551_get_work_mode() argument
1417 ret = sc8551_read_byte(sc, SC8551_REG_0C, &val); in sc8551_get_work_mode()
1420 dev_err(sc->dev, "Failed to read operation mode register\n"); in sc8551_get_work_mode()
1437 static int sc8551_check_vbus_error_status(struct sc8551 *sc) in sc8551_check_vbus_error_status() argument
1442 ret = sc8551_read_byte(sc, SC8551_REG_0A, &data); in sc8551_check_vbus_error_status()
1444 sc->vbus_error = data; in sc8551_check_vbus_error_status()
1449 static void sc8551_check_alarm_status(struct sc8551 *sc) in sc8551_check_alarm_status() argument
1455 mutex_lock(&sc->data_lock); in sc8551_check_alarm_status()
1457 ret = sc8551_read_byte(sc, SC8551_REG_08, &flag); in sc8551_check_alarm_status()
1462 ret = sc8551_read_byte(sc, SC8551_REG_2D, &flag); in sc8551_check_alarm_status()
1468 ret = sc8551_read_byte(sc, SC8551_REG_0E, &flag); in sc8551_check_alarm_status()
1472 ret = sc8551_read_byte(sc, SC8551_REG_0D, &stat); in sc8551_check_alarm_status()
1473 if (!ret && stat != sc->prev_alarm) { in sc8551_check_alarm_status()
1475 sc->prev_alarm = stat; in sc8551_check_alarm_status()
1476 sc->batt_present = !!(stat & VBAT_INSERT); in sc8551_check_alarm_status()
1477 sc->vbus_present = !!(stat & VBUS_INSERT); in sc8551_check_alarm_status()
1480 ret = sc8551_read_byte(sc, SC8551_REG_08, &stat); in sc8551_check_alarm_status()
1482 dev_err(sc->dev, "Reg[05]BUS_UCPOVP = 0x%02X\n", stat); in sc8551_check_alarm_status()
1484 ret = sc8551_read_byte(sc, SC8551_REG_0A, &stat); in sc8551_check_alarm_status()
1486 dev_err(sc->dev, "Reg[0A]CONV_OCP = 0x%02X\n", stat); in sc8551_check_alarm_status()
1488 mutex_unlock(&sc->data_lock); in sc8551_check_alarm_status()
1491 static void sc8551_check_fault_status(struct sc8551 *sc) in sc8551_check_fault_status() argument
1497 mutex_lock(&sc->data_lock); in sc8551_check_fault_status()
1499 ret = sc8551_read_byte(sc, SC8551_REG_10, &stat); in sc8551_check_fault_status()
1501 dev_err(sc->dev, "FAULT_STAT = 0x%02X\n", stat); in sc8551_check_fault_status()
1503 ret = sc8551_read_byte(sc, SC8551_REG_11, &flag); in sc8551_check_fault_status()
1505 dev_err(sc->dev, "FAULT_FLAG = 0x%02X\n", flag); in sc8551_check_fault_status()
1507 if (!ret && flag != sc->prev_fault) { in sc8551_check_fault_status()
1508 sc->prev_fault = flag; in sc8551_check_fault_status()
1509 sc->bat_ovp_fault = !!(flag & BAT_OVP_FAULT); in sc8551_check_fault_status()
1510 sc->bat_ocp_fault = !!(flag & BAT_OCP_FAULT); in sc8551_check_fault_status()
1511 sc->bus_ovp_fault = !!(flag & BUS_OVP_FAULT); in sc8551_check_fault_status()
1512 sc->bus_ocp_fault = !!(flag & BUS_OCP_FAULT); in sc8551_check_fault_status()
1515 mutex_unlock(&sc->data_lock); in sc8551_check_fault_status()
1518 static int sc8551_detect_device(struct sc8551 *sc) in sc8551_detect_device() argument
1523 ret = sc8551_read_byte(sc, SC8551_REG_13, &data); in sc8551_detect_device()
1525 sc->part_no = (data & SC8551_DEV_ID_MASK); in sc8551_detect_device()
1526 sc->part_no >>= SC8551_DEV_ID_SHIFT; in sc8551_detect_device()
1531 static int sc8551_parse_dt(struct sc8551 *sc, struct device *dev) in sc8551_parse_dt() argument
1536 sc->cfg = devm_kzalloc(dev, in sc8551_parse_dt()
1540 if (!sc->cfg) in sc8551_parse_dt()
1543 sc->cfg->bat_ovp_disable = of_property_read_bool(np, in sc8551_parse_dt()
1545 sc->cfg->bat_ocp_disable = of_property_read_bool(np, in sc8551_parse_dt()
1547 sc->cfg->bus_ocp_disable = of_property_read_bool(np, in sc8551_parse_dt()
1549 sc->cfg->bat_therm_disable = of_property_read_bool(np, in sc8551_parse_dt()
1551 sc->cfg->bus_therm_disable = of_property_read_bool(np, in sc8551_parse_dt()
1555 &sc->cfg->bat_ovp_th); in sc8551_parse_dt()
1557 dev_err(sc->dev, "failed to read bat-ovp-threshold\n"); in sc8551_parse_dt()
1561 &sc->cfg->bat_ocp_th); in sc8551_parse_dt()
1563 dev_err(sc->dev, "failed to read bat-ocp-threshold\n"); in sc8551_parse_dt()
1567 &sc->cfg->bus_ovp_th); in sc8551_parse_dt()
1569 dev_err(sc->dev, "failed to read bus-ovp-threshold\n"); in sc8551_parse_dt()
1573 &sc->cfg->bus_ocp_th); in sc8551_parse_dt()
1575 dev_err(sc->dev, "failed to read bus-ocp-threshold\n"); in sc8551_parse_dt()
1580 &sc->cfg->ac_ovp_th); in sc8551_parse_dt()
1582 dev_err(sc->dev, "failed to read ac-ovp-threshold\n"); in sc8551_parse_dt()
1587 &sc->cfg->sense_r_mohm); in sc8551_parse_dt()
1589 dev_err(sc->dev, "failed to read sense-resistor-mohm\n"); in sc8551_parse_dt()
1596 static int sc8551_init_protection(struct sc8551 *sc) in sc8551_init_protection() argument
1600 ret = sc8551_enable_batovp(sc, !sc->cfg->bat_ovp_disable); in sc8551_init_protection()
1602 sc->cfg->bat_ovp_disable ? "disable" : "enable", in sc8551_init_protection()
1605 ret = sc8551_enable_batocp(sc, !sc->cfg->bat_ocp_disable); in sc8551_init_protection()
1607 sc->cfg->bat_ocp_disable ? "disable" : "enable", in sc8551_init_protection()
1610 ret = sc8551_enable_busocp(sc, !sc->cfg->bus_ocp_disable); in sc8551_init_protection()
1612 sc->cfg->bus_ocp_disable ? "disable" : "enable", in sc8551_init_protection()
1615 ret = sc8551_enable_bat_therm(sc, !sc->cfg->bat_therm_disable); in sc8551_init_protection()
1617 sc->cfg->bat_therm_disable ? "disable" : "enable", in sc8551_init_protection()
1620 ret = sc8551_enable_bus_therm(sc, !sc->cfg->bus_therm_disable); in sc8551_init_protection()
1622 sc->cfg->bus_therm_disable ? "disable" : "enable", in sc8551_init_protection()
1625 ret = sc8551_set_batovp_th(sc, sc->cfg->bat_ovp_th); in sc8551_init_protection()
1626 pr_debug("set bat ovp th %d %s\n", sc->cfg->bat_ovp_th, in sc8551_init_protection()
1629 ret = sc8551_set_batocp_th(sc, sc->cfg->bat_ocp_th); in sc8551_init_protection()
1630 pr_debug("set bat ocp threshold %d %s\n", sc->cfg->bat_ocp_th, in sc8551_init_protection()
1633 ret = sc8551_set_busovp_th(sc, sc->cfg->bus_ovp_th); in sc8551_init_protection()
1634 pr_debug("set bus ovp threshold %d %s\n", sc->cfg->bus_ovp_th, in sc8551_init_protection()
1637 ret = sc8551_set_busocp_th(sc, sc->cfg->bus_ocp_th); in sc8551_init_protection()
1638 pr_debug("set bus ocp threshold %d %s\n", sc->cfg->bus_ocp_th, in sc8551_init_protection()
1641 ret = sc8551_set_acovp_th(sc, sc->cfg->ac_ovp_th); in sc8551_init_protection()
1642 pr_debug("set ac ovp threshold %d %s\n", sc->cfg->ac_ovp_th, in sc8551_init_protection()
1648 static int sc8551_init_adc(struct sc8551 *sc) in sc8551_init_adc() argument
1652 ret = sc8551_set_adc_scanrate(sc, false); in sc8551_init_adc()
1655 ret = sc8551_set_adc_scan(sc, ADC_IBUS, true); in sc8551_init_adc()
1658 ret = sc8551_set_adc_scan(sc, ADC_VBUS, true); in sc8551_init_adc()
1661 ret = sc8551_set_adc_scan(sc, ADC_VOUT, true); in sc8551_init_adc()
1664 ret = sc8551_set_adc_scan(sc, ADC_VBAT, true); in sc8551_init_adc()
1667 ret = sc8551_set_adc_scan(sc, ADC_IBAT, true); in sc8551_init_adc()
1670 ret = sc8551_set_adc_scan(sc, ADC_TBUS, true); in sc8551_init_adc()
1673 ret = sc8551_set_adc_scan(sc, ADC_TBAT, true); in sc8551_init_adc()
1676 ret = sc8551_set_adc_scan(sc, ADC_TDIE, true); in sc8551_init_adc()
1679 ret = sc8551_set_adc_scan(sc, ADC_VAC, true); in sc8551_init_adc()
1683 ret = sc8551_enable_adc(sc, true); in sc8551_init_adc()
1690 static int sc8551_init_int_src(struct sc8551 *sc) in sc8551_init_int_src() argument
1697 ret = sc8551_set_alarm_int_mask(sc, ADC_DONE); in sc8551_init_int_src()
1699 dev_err(sc->dev, "failed to set alarm mask:%d\n", ret); in sc8551_init_int_src()
1704 static int sc8551_init_regulation(struct sc8551 *sc) in sc8551_init_regulation() argument
1708 ret = sc8551_set_ibat_reg_th(sc, 300); in sc8551_init_regulation()
1711 ret = sc8551_set_vbat_reg_th(sc, 100); in sc8551_init_regulation()
1715 ret = sc8551_set_vdrop_deglitch(sc, 5000); in sc8551_init_regulation()
1718 ret = sc8551_set_vdrop_th(sc, 400); in sc8551_init_regulation()
1722 ret = sc8551_enable_regulation(sc, false); in sc8551_init_regulation()
1726 ret = sc8551_write_byte(sc, SC8551_REG_2E, 0x08); in sc8551_init_regulation()
1733 static int sc8551_init_device(struct sc8551 *sc) in sc8551_init_device() argument
1737 ret = sc8551_enable_wdt(sc, false); in sc8551_init_device()
1740 ret = sc8551_set_wdt(sc, 30000); in sc8551_init_device()
1743 ret = sc8551_set_ss_timeout(sc, 100000); in sc8551_init_device()
1746 ret = sc8551_set_sense_resistor(sc, sc->cfg->sense_r_mohm); in sc8551_init_device()
1749 ret = sc8551_init_protection(sc); in sc8551_init_device()
1752 ret = sc8551_init_adc(sc); in sc8551_init_device()
1755 ret = sc8551_init_int_src(sc); in sc8551_init_device()
1758 ret = sc8551_init_regulation(sc); in sc8551_init_device()
1765 static int sc8551_set_present(struct sc8551 *sc, bool present) in sc8551_set_present() argument
1767 sc->usb_present = present; in sc8551_set_present()
1770 sc8551_init_device(sc); in sc8551_set_present()
1778 struct sc8551 *sc = dev_get_drvdata(dev); in registers_show() local
1785 ret = sc8551_get_adc_data(sc, ADC_VBAT, &result); in registers_show()
1787 sc->vbat_volt = result; in registers_show()
1789 ret = sc8551_get_adc_data(sc, ADC_VAC, &result); in registers_show()
1791 sc->vac_volt = result; in registers_show()
1793 ret = sc8551_get_adc_data(sc, ADC_VBUS, &result); in registers_show()
1795 sc->vbus_volt = result; in registers_show()
1797 ret = sc8551_get_adc_data(sc, ADC_VOUT, &result); in registers_show()
1799 sc->vout_volt = result; in registers_show()
1801 ret = sc8551_get_adc_data(sc, ADC_IBUS, &result); in registers_show()
1803 sc->ibus_curr = result; in registers_show()
1805 ret = sc8551_get_adc_data(sc, ADC_TDIE, &result); in registers_show()
1807 sc->die_temp = result; in registers_show()
1808 ret = sc8551_get_adc_data(sc, ADC_IBAT, &result); in registers_show()
1810 sc->ibat_curr = result; in registers_show()
1812 dev_err(sc->dev, "vbus_vol %d vbat_vol(vout) %d vout %d, vac: %d\n", in registers_show()
1813 sc->vbus_volt, sc->vbat_volt, sc->vout_volt, sc->vac_volt); in registers_show()
1814 dev_err(sc->dev, "ibus_curr %d ibat_curr %d\n", sc->ibus_curr, sc->ibat_curr); in registers_show()
1815 dev_err(sc->dev, "die_temp %d\n", sc->die_temp); in registers_show()
1818 ret = sc8551_read_byte(sc, addr, &val); in registers_show()
1837 struct sc8551 *sc = dev_get_drvdata(dev); in registers_store() local
1844 sc8551_write_byte(sc, in registers_store()
1878 struct sc8551 *sc = power_supply_get_drvdata(psy); in sc8551_charger_get_property() local
1882 sc8551_check_alarm_status(sc); in sc8551_charger_get_property()
1883 sc8551_check_fault_status(sc); in sc8551_charger_get_property()
1884 sc8551_check_vbus_error_status(sc); in sc8551_charger_get_property()
1887 sc8551_check_charge_enabled(sc, &sc->charge_enabled); in sc8551_charger_get_property()
1888 val->intval = sc->charge_enabled; in sc8551_charger_get_property()
1891 val->intval = sc->usb_present; in sc8551_charger_get_property()
1894 ret = sc8551_get_adc_data(sc, ADC_VBAT, &result); in sc8551_charger_get_property()
1896 sc->vbat_volt = result; in sc8551_charger_get_property()
1897 val->intval = sc->vbat_volt * 1000; in sc8551_charger_get_property()
1900 ret = sc8551_get_adc_data(sc, ADC_IBAT, &result); in sc8551_charger_get_property()
1902 sc->ibat_curr = result; in sc8551_charger_get_property()
1903 val->intval = sc->ibat_curr * 1000; in sc8551_charger_get_property()
1906 ret = sc8551_get_adc_data(sc, ADC_VBUS, &result); in sc8551_charger_get_property()
1908 sc->vbus_volt = result; in sc8551_charger_get_property()
1909 val->intval = sc->vbus_volt * 1000; in sc8551_charger_get_property()
1912 ret = sc8551_get_adc_data(sc, ADC_IBUS, &result); in sc8551_charger_get_property()
1914 sc->ibus_curr = result; in sc8551_charger_get_property()
1915 val->intval = sc->ibus_curr * 1000; in sc8551_charger_get_property()
1924 ret = sc8551_get_adc_data(sc, ADC_TDIE, &result); in sc8551_charger_get_property()
1926 sc->die_temp = result; in sc8551_charger_get_property()
1927 val->intval = sc->die_temp; in sc8551_charger_get_property()
1937 val->intval = sc->bat_ovp_fault; in sc8551_charger_get_property()
1940 val->intval = sc->bat_ocp_fault; in sc8551_charger_get_property()
1943 val->intval = sc->bus_ovp_fault; in sc8551_charger_get_property()
1946 val->intval = sc->bus_ocp_fault; in sc8551_charger_get_property()
1949 val->intval = (sc->vbus_error >> 0x04) & 0x01; in sc8551_charger_get_property()
1952 val->intval = (sc->vbus_error >> 0x05) & 0x01; in sc8551_charger_get_property()
1964 struct sc8551 *sc = power_supply_get_drvdata(psy); in sc8551_charger_set_property() local
1968 sc8551_enable_charge(sc, val->intval); in sc8551_charger_set_property()
1970 sc8551_enable_wdt(sc, true); in sc8551_charger_set_property()
1972 sc8551_enable_wdt(sc, false); in sc8551_charger_set_property()
1973 sc8551_check_charge_enabled(sc, &sc->charge_enabled); in sc8551_charger_set_property()
1976 sc8551_set_present(sc, !!val->intval); in sc8551_charger_set_property()
2001 static int sc8551_psy_register(struct sc8551 *sc) in sc8551_psy_register() argument
2003 sc->psy_cfg.drv_data = sc; in sc8551_psy_register()
2004 sc->psy_cfg.of_node = sc->dev->of_node; in sc8551_psy_register()
2006 sc->psy_desc.name = "sc8551-standalone"; in sc8551_psy_register()
2008 sc->psy_desc.type = POWER_SUPPLY_TYPE_USB_PD; in sc8551_psy_register()
2009 sc->psy_desc.properties = sc8551_charger_props; in sc8551_psy_register()
2010 sc->psy_desc.num_properties = ARRAY_SIZE(sc8551_charger_props); in sc8551_psy_register()
2011 sc->psy_desc.get_property = sc8551_charger_get_property; in sc8551_psy_register()
2012 sc->psy_desc.set_property = sc8551_charger_set_property; in sc8551_psy_register()
2013 sc->psy_desc.property_is_writeable = sc8551_charger_is_writeable; in sc8551_psy_register()
2015 sc->fc2_psy = devm_power_supply_register(sc->dev, in sc8551_psy_register()
2016 &sc->psy_desc, in sc8551_psy_register()
2017 &sc->psy_cfg); in sc8551_psy_register()
2018 if (IS_ERR(sc->fc2_psy)) { in sc8551_psy_register()
2019 dev_err(sc->dev, "failed to register fc2_psy\n"); in sc8551_psy_register()
2020 return PTR_ERR(sc->fc2_psy); in sc8551_psy_register()
2032 struct sc8551 *sc = dev_id; in sc8551_charger_interrupt() local
2035 ret = sc8551_get_adc_data(sc, ADC_VOUT, &value); in sc8551_charger_interrupt()
2037 sc->vbat_volt = value; in sc8551_charger_interrupt()
2039 ret = sc8551_get_adc_data(sc, ADC_IBAT, &value); in sc8551_charger_interrupt()
2041 sc->ibat_curr = value; in sc8551_charger_interrupt()
2043 ret = sc8551_get_adc_data(sc, ADC_VBUS, &value); in sc8551_charger_interrupt()
2045 sc->vbus_volt = value; in sc8551_charger_interrupt()
2047 ret = sc8551_get_adc_data(sc, ADC_IBUS, &value); in sc8551_charger_interrupt()
2049 sc->ibus_curr = value; in sc8551_charger_interrupt()
2051 ret = sc8551_get_adc_data(sc, ADC_TDIE, &value); in sc8551_charger_interrupt()
2053 sc->die_temp = value; in sc8551_charger_interrupt()
2054 ret = sc8551_get_adc_data(sc, ADC_IBAT, &value); in sc8551_charger_interrupt()
2056 sc->ibat_curr = value; in sc8551_charger_interrupt()
2058 sc8551_check_alarm_status(sc); in sc8551_charger_interrupt()
2059 sc8551_check_fault_status(sc); in sc8551_charger_interrupt()
2060 sc8551_check_vbus_error_status(sc); in sc8551_charger_interrupt()
2061 power_supply_changed(sc->fc2_psy); in sc8551_charger_interrupt()
2066 static int sc8551_init_irq(struct sc8551 *sc) in sc8551_init_irq() argument
2070 sc->irq = sc->client->irq; in sc8551_init_irq()
2071 if (sc->irq <= 0) { in sc8551_init_irq()
2072 dev_err(sc->dev, "irq mapping fail\n"); in sc8551_init_irq()
2076 ret = devm_request_threaded_irq(sc->dev, in sc8551_init_irq()
2077 sc->irq, in sc8551_init_irq()
2082 sc); in sc8551_init_irq()
2084 dev_err(sc->dev, "request irq for irq=%d failed, ret =%d\n", in sc8551_init_irq()
2085 sc->irq, ret); in sc8551_init_irq()
2087 enable_irq_wake(sc->irq); in sc8551_init_irq()
2088 device_init_wakeup(sc->dev, 1); in sc8551_init_irq()
2093 static void determine_initial_status(struct sc8551 *sc) in determine_initial_status() argument
2095 if (sc->client->irq) in determine_initial_status()
2096 sc8551_charger_interrupt(sc->client->irq, sc); in determine_initial_status()
2107 struct sc8551 *sc; in sc8551_charger_probe() local
2112 sc = devm_kzalloc(&client->dev, sizeof(struct sc8551), GFP_KERNEL); in sc8551_charger_probe()
2113 if (!sc) in sc8551_charger_probe()
2116 sc->dev = &client->dev; in sc8551_charger_probe()
2118 sc->client = client; in sc8551_charger_probe()
2120 mutex_init(&sc->i2c_rw_lock); in sc8551_charger_probe()
2121 mutex_init(&sc->data_lock); in sc8551_charger_probe()
2123 ret = sc8551_detect_device(sc); in sc8551_charger_probe()
2125 dev_err(sc->dev, "No sc8551 device found!\n"); in sc8551_charger_probe()
2129 i2c_set_clientdata(client, sc); in sc8551_charger_probe()
2133 dev_err(sc->dev, "device tree match not found!\n"); in sc8551_charger_probe()
2136 sc8551_get_work_mode(sc, &sc->mode); in sc8551_charger_probe()
2137 if (sc->mode != SC8551_ROLE_STDALONE) { in sc8551_charger_probe()
2138 dev_err(sc->dev, "device operation mode mismatch with dts configuration\n"); in sc8551_charger_probe()
2142 ret = sc8551_parse_dt(sc, &client->dev); in sc8551_charger_probe()
2146 ret = sc8551_init_device(sc); in sc8551_charger_probe()
2148 dev_err(sc->dev, "Failed to init device\n"); in sc8551_charger_probe()
2152 ret = sc8551_psy_register(sc); in sc8551_charger_probe()
2156 ret = sc8551_init_irq(sc); in sc8551_charger_probe()
2160 determine_initial_status(sc); in sc8551_charger_probe()
2166 power_supply_unregister(sc->fc2_psy); in sc8551_charger_probe()
2172 struct sc8551 *sc = i2c_get_clientdata(client); in sc8551_charger_remove() local
2175 sc8551_enable_adc(sc, false); in sc8551_charger_remove()
2177 power_supply_unregister(sc->fc2_psy); in sc8551_charger_remove()
2179 mutex_destroy(&sc->data_lock); in sc8551_charger_remove()
2180 mutex_destroy(&sc->i2c_rw_lock); in sc8551_charger_remove()
2187 struct sc8551 *sc = i2c_get_clientdata(client); in sc8551_charger_shutdown() local
2189 sc8551_enable_adc(sc, false); in sc8551_charger_shutdown()