Lines Matching refs:bq

195 static int bq2415x_i2c_read(struct bq2415x_device *bq, u8 reg)  in bq2415x_i2c_read()  argument
197 struct i2c_client *client = to_i2c_client(bq->dev); in bq2415x_i2c_read()
225 static int bq2415x_i2c_read_mask(struct bq2415x_device *bq, u8 reg, in bq2415x_i2c_read_mask() argument
233 ret = bq2415x_i2c_read(bq, reg); in bq2415x_i2c_read_mask()
240 static int bq2415x_i2c_read_bit(struct bq2415x_device *bq, u8 reg, u8 bit) in bq2415x_i2c_read_bit() argument
244 return bq2415x_i2c_read_mask(bq, reg, BIT(bit), bit); in bq2415x_i2c_read_bit()
250 static int bq2415x_i2c_write(struct bq2415x_device *bq, u8 reg, u8 val) in bq2415x_i2c_write() argument
252 struct i2c_client *client = to_i2c_client(bq->dev); in bq2415x_i2c_write()
279 static int bq2415x_i2c_write_mask(struct bq2415x_device *bq, u8 reg, u8 val, in bq2415x_i2c_write_mask() argument
287 ret = bq2415x_i2c_read(bq, reg); in bq2415x_i2c_write_mask()
294 return bq2415x_i2c_write(bq, reg, ret); in bq2415x_i2c_write_mask()
298 static int bq2415x_i2c_write_bit(struct bq2415x_device *bq, u8 reg, in bq2415x_i2c_write_bit() argument
303 return bq2415x_i2c_write_mask(bq, reg, val, BIT(bit), bit); in bq2415x_i2c_write_bit()
309 static int bq2415x_exec_command(struct bq2415x_device *bq, in bq2415x_exec_command() argument
316 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
319 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
322 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
325 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_STATUS, 1, in bq2415x_exec_command()
328 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_STATUS, 0, in bq2415x_exec_command()
331 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
334 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
337 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
341 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
344 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
347 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
350 ret = bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
356 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
359 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
362 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
365 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
368 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
371 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
374 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
377 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
381 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
384 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
387 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
390 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
393 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
396 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
400 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_VENDER, in bq2415x_exec_command()
403 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_VENDER, in bq2415x_exec_command()
406 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_VENDER, in bq2415x_exec_command()
413 static enum bq2415x_chip bq2415x_detect_chip(struct bq2415x_device *bq) in bq2415x_detect_chip() argument
415 struct i2c_client *client = to_i2c_client(bq->dev); in bq2415x_detect_chip()
416 int ret = bq2415x_exec_command(bq, BQ2415X_PART_NUMBER); in bq2415x_detect_chip()
425 if (bq->chip == BQ24151A) in bq2415x_detect_chip()
426 return bq->chip; in bq2415x_detect_chip()
429 if (bq->chip == BQ24150A || in bq2415x_detect_chip()
430 bq->chip == BQ24152 || in bq2415x_detect_chip()
431 bq->chip == BQ24155) in bq2415x_detect_chip()
432 return bq->chip; in bq2415x_detect_chip()
435 if (bq->chip == BQ24153A) in bq2415x_detect_chip()
436 return bq->chip; in bq2415x_detect_chip()
446 if (bq->chip == BQ24156A) in bq2415x_detect_chip()
447 return bq->chip; in bq2415x_detect_chip()
450 if (bq->chip == BQ24157S) in bq2415x_detect_chip()
451 return bq->chip; in bq2415x_detect_chip()
463 static int bq2415x_detect_revision(struct bq2415x_device *bq) in bq2415x_detect_revision() argument
465 int ret = bq2415x_exec_command(bq, BQ2415X_REVISION); in bq2415x_detect_revision()
466 int chip = bq2415x_detect_chip(bq); in bq2415x_detect_revision()
503 static int bq2415x_get_vender_code(struct bq2415x_device *bq) in bq2415x_get_vender_code() argument
507 ret = bq2415x_exec_command(bq, BQ2415X_VENDER_CODE); in bq2415x_get_vender_code()
518 static void bq2415x_reset_chip(struct bq2415x_device *bq) in bq2415x_reset_chip() argument
520 bq2415x_i2c_write(bq, BQ2415X_REG_CURRENT, BQ2415X_RESET_CURRENT); in bq2415x_reset_chip()
521 bq2415x_i2c_write(bq, BQ2415X_REG_VOLTAGE, BQ2415X_RESET_VOLTAGE); in bq2415x_reset_chip()
522 bq2415x_i2c_write(bq, BQ2415X_REG_CONTROL, BQ2415X_RESET_CONTROL); in bq2415x_reset_chip()
523 bq2415x_i2c_write(bq, BQ2415X_REG_STATUS, BQ2415X_RESET_STATUS); in bq2415x_reset_chip()
524 bq->timer_error = NULL; in bq2415x_reset_chip()
530 static int bq2415x_set_current_limit(struct bq2415x_device *bq, int mA) in bq2415x_set_current_limit() argument
543 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CONTROL, val, in bq2415x_set_current_limit()
548 static int bq2415x_get_current_limit(struct bq2415x_device *bq) in bq2415x_get_current_limit() argument
552 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CONTROL, in bq2415x_get_current_limit()
568 static int bq2415x_set_weak_battery_voltage(struct bq2415x_device *bq, int mV) in bq2415x_set_weak_battery_voltage() argument
582 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CONTROL, val, in bq2415x_set_weak_battery_voltage()
587 static int bq2415x_get_weak_battery_voltage(struct bq2415x_device *bq) in bq2415x_get_weak_battery_voltage() argument
591 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CONTROL, in bq2415x_get_weak_battery_voltage()
599 static int bq2415x_set_battery_regulation_voltage(struct bq2415x_device *bq, in bq2415x_set_battery_regulation_voltage() argument
613 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_VOLTAGE, val, in bq2415x_set_battery_regulation_voltage()
618 static int bq2415x_get_battery_regulation_voltage(struct bq2415x_device *bq) in bq2415x_get_battery_regulation_voltage() argument
620 int ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_VOLTAGE, in bq2415x_get_battery_regulation_voltage()
629 static int bq2415x_set_charge_current(struct bq2415x_device *bq, int mA) in bq2415x_set_charge_current() argument
633 if (bq->init_data.resistor_sense <= 0) in bq2415x_set_charge_current()
636 val = (mA * bq->init_data.resistor_sense - 37400) / 6800; in bq2415x_set_charge_current()
642 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CURRENT, val, in bq2415x_set_charge_current()
648 static int bq2415x_get_charge_current(struct bq2415x_device *bq) in bq2415x_get_charge_current() argument
652 if (bq->init_data.resistor_sense <= 0) in bq2415x_get_charge_current()
655 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CURRENT, in bq2415x_get_charge_current()
659 return (37400 + 6800*ret) / bq->init_data.resistor_sense; in bq2415x_get_charge_current()
663 static int bq2415x_set_termination_current(struct bq2415x_device *bq, int mA) in bq2415x_set_termination_current() argument
667 if (bq->init_data.resistor_sense <= 0) in bq2415x_set_termination_current()
670 val = (mA * bq->init_data.resistor_sense - 3400) / 3400; in bq2415x_set_termination_current()
676 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CURRENT, val, in bq2415x_set_termination_current()
682 static int bq2415x_get_termination_current(struct bq2415x_device *bq) in bq2415x_get_termination_current() argument
686 if (bq->init_data.resistor_sense <= 0) in bq2415x_get_termination_current()
689 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CURRENT, in bq2415x_get_termination_current()
693 return (3400 + 3400*ret) / bq->init_data.resistor_sense; in bq2415x_get_termination_current()
697 #define bq2415x_set_default_value(bq, prop) \ argument
700 if (bq->init_data.prop != -1) \
701 ret = bq2415x_set_##prop(bq, bq->init_data.prop); \
707 static int bq2415x_set_defaults(struct bq2415x_device *bq) in bq2415x_set_defaults() argument
709 bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_DISABLE); in bq2415x_set_defaults()
710 bq2415x_exec_command(bq, BQ2415X_CHARGER_DISABLE); in bq2415x_set_defaults()
711 bq2415x_exec_command(bq, BQ2415X_CHARGE_TERMINATION_DISABLE); in bq2415x_set_defaults()
713 bq2415x_set_default_value(bq, current_limit); in bq2415x_set_defaults()
714 bq2415x_set_default_value(bq, weak_battery_voltage); in bq2415x_set_defaults()
715 bq2415x_set_default_value(bq, battery_regulation_voltage); in bq2415x_set_defaults()
717 if (bq->init_data.resistor_sense > 0) { in bq2415x_set_defaults()
718 bq2415x_set_default_value(bq, charge_current); in bq2415x_set_defaults()
719 bq2415x_set_default_value(bq, termination_current); in bq2415x_set_defaults()
720 bq2415x_exec_command(bq, BQ2415X_CHARGE_TERMINATION_ENABLE); in bq2415x_set_defaults()
723 bq2415x_exec_command(bq, BQ2415X_CHARGER_ENABLE); in bq2415x_set_defaults()
730 static int bq2415x_set_mode(struct bq2415x_device *bq, enum bq2415x_mode mode) in bq2415x_set_mode() argument
742 ret = bq2415x_exec_command(bq, BQ2415X_CHARGER_DISABLE); in bq2415x_set_mode()
745 ret = bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_DISABLE); in bq2415x_set_mode()
752 dev_dbg(bq->dev, "changing mode to: Offline\n"); in bq2415x_set_mode()
753 ret = bq2415x_set_current_limit(bq, 100); in bq2415x_set_mode()
756 dev_dbg(bq->dev, "changing mode to: N/A\n"); in bq2415x_set_mode()
757 ret = bq2415x_set_current_limit(bq, 100); in bq2415x_set_mode()
760 dev_dbg(bq->dev, "changing mode to: Host/HUB charger\n"); in bq2415x_set_mode()
761 ret = bq2415x_set_current_limit(bq, 500); in bq2415x_set_mode()
764 dev_dbg(bq->dev, "changing mode to: Dedicated charger\n"); in bq2415x_set_mode()
765 ret = bq2415x_set_current_limit(bq, 1800); in bq2415x_set_mode()
768 dev_dbg(bq->dev, "changing mode to: Boost\n"); in bq2415x_set_mode()
769 ret = bq2415x_set_current_limit(bq, 100); in bq2415x_set_mode()
777 ret = bq2415x_exec_command(bq, BQ2415X_CHARGER_ENABLE); in bq2415x_set_mode()
779 ret = bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_ENABLE); in bq2415x_set_mode()
784 bq2415x_set_default_value(bq, weak_battery_voltage); in bq2415x_set_mode()
785 bq2415x_set_default_value(bq, battery_regulation_voltage); in bq2415x_set_mode()
787 bq->mode = mode; in bq2415x_set_mode()
788 sysfs_notify(&bq->charger->dev.kobj, NULL, "mode"); in bq2415x_set_mode()
797 struct bq2415x_device *bq = in bq2415x_notifier_call() local
808 if (psy != bq->notify_psy) in bq2415x_notifier_call()
811 dev_dbg(bq->dev, "notifier call was called\n"); in bq2415x_notifier_call()
829 if (bq->reported_mode == mode) in bq2415x_notifier_call()
832 bq->reported_mode = mode; in bq2415x_notifier_call()
835 if (bq->automode < 1) in bq2415x_notifier_call()
838 schedule_delayed_work(&bq->work, 0); in bq2415x_notifier_call()
846 static void bq2415x_set_autotimer(struct bq2415x_device *bq, int state) in bq2415x_set_autotimer() argument
850 if (bq->autotimer == state) { in bq2415x_set_autotimer()
855 bq->autotimer = state; in bq2415x_set_autotimer()
858 schedule_delayed_work(&bq->work, BQ2415X_TIMER_TIMEOUT * HZ); in bq2415x_set_autotimer()
859 bq2415x_exec_command(bq, BQ2415X_TIMER_RESET); in bq2415x_set_autotimer()
860 bq->timer_error = NULL; in bq2415x_set_autotimer()
862 cancel_delayed_work_sync(&bq->work); in bq2415x_set_autotimer()
869 static void bq2415x_timer_error(struct bq2415x_device *bq, const char *msg) in bq2415x_timer_error() argument
871 bq->timer_error = msg; in bq2415x_timer_error()
872 sysfs_notify(&bq->charger->dev.kobj, NULL, "timer"); in bq2415x_timer_error()
873 dev_err(bq->dev, "%s\n", msg); in bq2415x_timer_error()
874 if (bq->automode > 0) in bq2415x_timer_error()
875 bq->automode = 0; in bq2415x_timer_error()
876 bq2415x_set_mode(bq, BQ2415X_MODE_OFF); in bq2415x_timer_error()
877 bq2415x_set_autotimer(bq, 0); in bq2415x_timer_error()
883 struct bq2415x_device *bq = container_of(work, struct bq2415x_device, in bq2415x_timer_work() local
889 if (bq->automode > 0 && (bq->reported_mode != bq->mode)) { in bq2415x_timer_work()
890 sysfs_notify(&bq->charger->dev.kobj, NULL, "reported_mode"); in bq2415x_timer_work()
891 bq2415x_set_mode(bq, bq->reported_mode); in bq2415x_timer_work()
894 if (!bq->autotimer) in bq2415x_timer_work()
897 ret = bq2415x_exec_command(bq, BQ2415X_TIMER_RESET); in bq2415x_timer_work()
899 bq2415x_timer_error(bq, "Resetting timer failed"); in bq2415x_timer_work()
903 boost = bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_STATUS); in bq2415x_timer_work()
905 bq2415x_timer_error(bq, "Unknown error"); in bq2415x_timer_work()
909 error = bq2415x_exec_command(bq, BQ2415X_FAULT_STATUS); in bq2415x_timer_work()
911 bq2415x_timer_error(bq, "Unknown error"); in bq2415x_timer_work()
921 dev_err(bq->dev, "Timer expired\n"); in bq2415x_timer_work()
924 dev_err(bq->dev, "Battery voltage to low\n"); in bq2415x_timer_work()
929 bq2415x_timer_error(bq, in bq2415x_timer_work()
933 bq2415x_timer_error(bq, "Overload"); in bq2415x_timer_work()
936 bq2415x_timer_error(bq, in bq2415x_timer_work()
940 bq2415x_timer_error(bq, in bq2415x_timer_work()
944 bq2415x_timer_error(bq, "Unknown error"); in bq2415x_timer_work()
953 dev_err(bq->dev, "Sleep mode\n"); in bq2415x_timer_work()
956 dev_err(bq->dev, "Poor input source\n"); in bq2415x_timer_work()
959 dev_err(bq->dev, "Timer expired\n"); in bq2415x_timer_work()
962 dev_err(bq->dev, "No battery\n"); in bq2415x_timer_work()
967 bq2415x_timer_error(bq, in bq2415x_timer_work()
971 bq2415x_timer_error(bq, in bq2415x_timer_work()
975 bq2415x_timer_error(bq, in bq2415x_timer_work()
981 schedule_delayed_work(&bq->work, BQ2415X_TIMER_TIMEOUT * HZ); in bq2415x_timer_work()
996 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_power_supply_get_property() local
1001 ret = bq2415x_exec_command(bq, BQ2415X_CHARGE_STATUS); in bq2415x_power_supply_get_property()
1014 val->strval = bq->model; in bq2415x_power_supply_get_property()
1022 static int bq2415x_power_supply_init(struct bq2415x_device *bq) in bq2415x_power_supply_init() argument
1027 struct power_supply_config psy_cfg = { .drv_data = bq, }; in bq2415x_power_supply_init()
1029 bq->charger_desc.name = bq->name; in bq2415x_power_supply_init()
1030 bq->charger_desc.type = POWER_SUPPLY_TYPE_USB; in bq2415x_power_supply_init()
1031 bq->charger_desc.properties = bq2415x_power_supply_props; in bq2415x_power_supply_init()
1032 bq->charger_desc.num_properties = in bq2415x_power_supply_init()
1034 bq->charger_desc.get_property = bq2415x_power_supply_get_property; in bq2415x_power_supply_init()
1036 ret = bq2415x_detect_chip(bq); in bq2415x_power_supply_init()
1042 ret = bq2415x_detect_revision(bq); in bq2415x_power_supply_init()
1048 bq->model = kasprintf(GFP_KERNEL, in bq2415x_power_supply_init()
1051 bq2415x_get_vender_code(bq)); in bq2415x_power_supply_init()
1052 if (!bq->model) { in bq2415x_power_supply_init()
1053 dev_err(bq->dev, "failed to allocate model name\n"); in bq2415x_power_supply_init()
1057 bq->charger = power_supply_register(bq->dev, &bq->charger_desc, in bq2415x_power_supply_init()
1059 if (IS_ERR(bq->charger)) { in bq2415x_power_supply_init()
1060 kfree(bq->model); in bq2415x_power_supply_init()
1061 return PTR_ERR(bq->charger); in bq2415x_power_supply_init()
1067 static void bq2415x_power_supply_exit(struct bq2415x_device *bq) in bq2415x_power_supply_exit() argument
1069 bq->autotimer = 0; in bq2415x_power_supply_exit()
1070 if (bq->automode > 0) in bq2415x_power_supply_exit()
1071 bq->automode = 0; in bq2415x_power_supply_exit()
1072 cancel_delayed_work_sync(&bq->work); in bq2415x_power_supply_exit()
1073 power_supply_unregister(bq->charger); in bq2415x_power_supply_exit()
1074 kfree(bq->model); in bq2415x_power_supply_exit()
1085 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_status() local
1100 ret = bq2415x_exec_command(bq, command); in bq2415x_sysfs_show_status()
1118 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_timer() local
1122 bq2415x_set_autotimer(bq, 1); in bq2415x_sysfs_set_timer()
1124 bq2415x_set_autotimer(bq, 0); in bq2415x_sysfs_set_timer()
1126 ret = bq2415x_exec_command(bq, BQ2415X_TIMER_RESET); in bq2415x_sysfs_set_timer()
1139 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_timer() local
1141 if (bq->timer_error) in bq2415x_sysfs_show_timer()
1142 return sprintf(buf, "%s\n", bq->timer_error); in bq2415x_sysfs_show_timer()
1144 if (bq->autotimer) in bq2415x_sysfs_show_timer()
1163 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_mode() local
1168 if (bq->automode < 0) in bq2415x_sysfs_set_mode()
1170 bq->automode = 1; in bq2415x_sysfs_set_mode()
1171 mode = bq->reported_mode; in bq2415x_sysfs_set_mode()
1173 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1174 bq->automode = 0; in bq2415x_sysfs_set_mode()
1177 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1178 bq->automode = 0; in bq2415x_sysfs_set_mode()
1181 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1182 bq->automode = 0; in bq2415x_sysfs_set_mode()
1185 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1186 bq->automode = 0; in bq2415x_sysfs_set_mode()
1189 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1190 bq->automode = 0; in bq2415x_sysfs_set_mode()
1193 bq2415x_reset_chip(bq); in bq2415x_sysfs_set_mode()
1194 bq2415x_set_defaults(bq); in bq2415x_sysfs_set_mode()
1195 if (bq->automode <= 0) in bq2415x_sysfs_set_mode()
1197 bq->automode = 1; in bq2415x_sysfs_set_mode()
1198 mode = bq->reported_mode; in bq2415x_sysfs_set_mode()
1203 ret = bq2415x_set_mode(bq, mode); in bq2415x_sysfs_set_mode()
1215 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_mode() local
1218 if (bq->automode > 0) in bq2415x_sysfs_show_mode()
1221 switch (bq->mode) { in bq2415x_sysfs_show_mode()
1239 if (bq->automode > 0) in bq2415x_sysfs_show_mode()
1252 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_reported_mode() local
1254 if (bq->automode < 0) in bq2415x_sysfs_show_reported_mode()
1257 switch (bq->reported_mode) { in bq2415x_sysfs_show_reported_mode()
1280 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_registers() local
1291 ret = bq2415x_i2c_write(bq, reg, val); in bq2415x_sysfs_set_registers()
1298 static ssize_t bq2415x_sysfs_print_reg(struct bq2415x_device *bq, in bq2415x_sysfs_print_reg() argument
1302 int ret = bq2415x_i2c_read(bq, reg); in bq2415x_sysfs_print_reg()
1315 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_registers() local
1318 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_STATUS, buf+ret); in bq2415x_sysfs_show_registers()
1319 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_CONTROL, buf+ret); in bq2415x_sysfs_show_registers()
1320 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_VOLTAGE, buf+ret); in bq2415x_sysfs_show_registers()
1321 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_VENDER, buf+ret); in bq2415x_sysfs_show_registers()
1322 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_CURRENT, buf+ret); in bq2415x_sysfs_show_registers()
1333 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_limit() local
1341 ret = bq2415x_set_current_limit(bq, val); in bq2415x_sysfs_set_limit()
1343 ret = bq2415x_set_weak_battery_voltage(bq, val); in bq2415x_sysfs_set_limit()
1345 ret = bq2415x_set_battery_regulation_voltage(bq, val); in bq2415x_sysfs_set_limit()
1347 ret = bq2415x_set_charge_current(bq, val); in bq2415x_sysfs_set_limit()
1349 ret = bq2415x_set_termination_current(bq, val); in bq2415x_sysfs_set_limit()
1364 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_limit() local
1368 ret = bq2415x_get_current_limit(bq); in bq2415x_sysfs_show_limit()
1370 ret = bq2415x_get_weak_battery_voltage(bq); in bq2415x_sysfs_show_limit()
1372 ret = bq2415x_get_battery_regulation_voltage(bq); in bq2415x_sysfs_show_limit()
1374 ret = bq2415x_get_charge_current(bq); in bq2415x_sysfs_show_limit()
1376 ret = bq2415x_get_termination_current(bq); in bq2415x_sysfs_show_limit()
1392 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_enable() local
1415 ret = bq2415x_exec_command(bq, command); in bq2415x_sysfs_set_enable()
1427 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_enable() local
1442 ret = bq2415x_exec_command(bq, command); in bq2415x_sysfs_show_enable()
1516 static int bq2415x_sysfs_init(struct bq2415x_device *bq) in bq2415x_sysfs_init() argument
1518 return sysfs_create_group(&bq->charger->dev.kobj, in bq2415x_sysfs_init()
1522 static void bq2415x_sysfs_exit(struct bq2415x_device *bq) in bq2415x_sysfs_exit() argument
1524 sysfs_remove_group(&bq->charger->dev.kobj, &bq2415x_sysfs_attr_group); in bq2415x_sysfs_exit()
1534 struct bq2415x_device *bq; in bq2415x_probe() local
1557 bq = devm_kzalloc(&client->dev, sizeof(*bq), GFP_KERNEL); in bq2415x_probe()
1558 if (!bq) { in bq2415x_probe()
1565 bq->notify_psy = power_supply_get_by_phandle(np, "ti,usb-charger-detection"); in bq2415x_probe()
1567 if (IS_ERR(bq->notify_psy)) { in bq2415x_probe()
1570 PTR_ERR(bq->notify_psy)); in bq2415x_probe()
1571 bq->notify_psy = NULL; in bq2415x_probe()
1572 } else if (!bq->notify_psy) { in bq2415x_probe()
1578 bq->notify_psy = power_supply_get_by_name(pdata->notify_device); in bq2415x_probe()
1580 bq->notify_psy = NULL; in bq2415x_probe()
1582 i2c_set_clientdata(client, bq); in bq2415x_probe()
1584 bq->id = num; in bq2415x_probe()
1585 bq->dev = &client->dev; in bq2415x_probe()
1586 bq->chip = id->driver_data; in bq2415x_probe()
1587 bq->name = name; in bq2415x_probe()
1588 bq->mode = BQ2415X_MODE_OFF; in bq2415x_probe()
1589 bq->reported_mode = BQ2415X_MODE_OFF; in bq2415x_probe()
1590 bq->autotimer = 0; in bq2415x_probe()
1591 bq->automode = 0; in bq2415x_probe()
1595 &bq->init_data.current_limit); in bq2415x_probe()
1599 &bq->init_data.weak_battery_voltage); in bq2415x_probe()
1603 &bq->init_data.battery_regulation_voltage); in bq2415x_probe()
1607 &bq->init_data.charge_current); in bq2415x_probe()
1611 &bq->init_data.termination_current); in bq2415x_probe()
1615 &bq->init_data.resistor_sense); in bq2415x_probe()
1619 memcpy(&bq->init_data, pdata, sizeof(bq->init_data)); in bq2415x_probe()
1622 bq2415x_reset_chip(bq); in bq2415x_probe()
1624 ret = bq2415x_power_supply_init(bq); in bq2415x_probe()
1626 dev_err(bq->dev, "failed to register power supply: %d\n", ret); in bq2415x_probe()
1630 ret = bq2415x_sysfs_init(bq); in bq2415x_probe()
1632 dev_err(bq->dev, "failed to create sysfs entries: %d\n", ret); in bq2415x_probe()
1636 ret = bq2415x_set_defaults(bq); in bq2415x_probe()
1638 dev_err(bq->dev, "failed to set default values: %d\n", ret); in bq2415x_probe()
1642 if (bq->notify_psy) { in bq2415x_probe()
1643 bq->nb.notifier_call = bq2415x_notifier_call; in bq2415x_probe()
1644 ret = power_supply_reg_notifier(&bq->nb); in bq2415x_probe()
1646 dev_err(bq->dev, "failed to reg notifier: %d\n", ret); in bq2415x_probe()
1651 bq2415x_notifier_call(&bq->nb, PSY_EVENT_PROP_CHANGED, bq->notify_psy); in bq2415x_probe()
1652 bq2415x_set_mode(bq, bq->reported_mode); in bq2415x_probe()
1654 bq->automode = 1; in bq2415x_probe()
1655 dev_info(bq->dev, "automode enabled\n"); in bq2415x_probe()
1657 bq->automode = -1; in bq2415x_probe()
1658 dev_info(bq->dev, "automode not supported\n"); in bq2415x_probe()
1661 INIT_DELAYED_WORK(&bq->work, bq2415x_timer_work); in bq2415x_probe()
1662 bq2415x_set_autotimer(bq, 1); in bq2415x_probe()
1664 dev_info(bq->dev, "driver registered\n"); in bq2415x_probe()
1669 bq2415x_sysfs_exit(bq); in bq2415x_probe()
1671 bq2415x_power_supply_exit(bq); in bq2415x_probe()
1673 if (bq->notify_psy) in bq2415x_probe()
1674 power_supply_put(bq->notify_psy); in bq2415x_probe()
1689 struct bq2415x_device *bq = i2c_get_clientdata(client); in bq2415x_remove() local
1691 if (bq->notify_psy) { in bq2415x_remove()
1692 power_supply_unreg_notifier(&bq->nb); in bq2415x_remove()
1693 power_supply_put(bq->notify_psy); in bq2415x_remove()
1696 bq2415x_sysfs_exit(bq); in bq2415x_remove()
1697 bq2415x_power_supply_exit(bq); in bq2415x_remove()
1699 bq2415x_reset_chip(bq); in bq2415x_remove()
1702 idr_remove(&bq2415x_id, bq->id); in bq2415x_remove()
1705 dev_info(bq->dev, "driver unregistered\n"); in bq2415x_remove()
1707 kfree(bq->name); in bq2415x_remove()