Lines Matching refs:bq
196 static int bq2415x_i2c_read(struct bq2415x_device *bq, u8 reg) in bq2415x_i2c_read() argument
198 struct i2c_client *client = to_i2c_client(bq->dev); in bq2415x_i2c_read()
226 static int bq2415x_i2c_read_mask(struct bq2415x_device *bq, u8 reg, in bq2415x_i2c_read_mask() argument
234 ret = bq2415x_i2c_read(bq, reg); in bq2415x_i2c_read_mask()
241 static int bq2415x_i2c_read_bit(struct bq2415x_device *bq, u8 reg, u8 bit) in bq2415x_i2c_read_bit() argument
245 return bq2415x_i2c_read_mask(bq, reg, BIT(bit), bit); in bq2415x_i2c_read_bit()
251 static int bq2415x_i2c_write(struct bq2415x_device *bq, u8 reg, u8 val) in bq2415x_i2c_write() argument
253 struct i2c_client *client = to_i2c_client(bq->dev); in bq2415x_i2c_write()
280 static int bq2415x_i2c_write_mask(struct bq2415x_device *bq, u8 reg, u8 val, in bq2415x_i2c_write_mask() argument
288 ret = bq2415x_i2c_read(bq, reg); in bq2415x_i2c_write_mask()
295 return bq2415x_i2c_write(bq, reg, ret); in bq2415x_i2c_write_mask()
299 static int bq2415x_i2c_write_bit(struct bq2415x_device *bq, u8 reg, in bq2415x_i2c_write_bit() argument
304 return bq2415x_i2c_write_mask(bq, reg, val, BIT(bit), bit); in bq2415x_i2c_write_bit()
310 static int bq2415x_exec_command(struct bq2415x_device *bq, in bq2415x_exec_command() argument
317 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
320 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
323 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
326 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_STATUS, 1, in bq2415x_exec_command()
329 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_STATUS, 0, in bq2415x_exec_command()
332 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
335 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
338 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
342 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
345 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
348 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
351 ret = bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
357 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
360 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
363 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
366 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
369 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
372 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
375 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
378 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
382 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
385 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
388 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
391 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
394 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
397 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
401 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_VENDER, in bq2415x_exec_command()
404 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_VENDER, in bq2415x_exec_command()
407 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_VENDER, in bq2415x_exec_command()
414 static enum bq2415x_chip bq2415x_detect_chip(struct bq2415x_device *bq) in bq2415x_detect_chip() argument
416 struct i2c_client *client = to_i2c_client(bq->dev); in bq2415x_detect_chip()
417 int ret = bq2415x_exec_command(bq, BQ2415X_PART_NUMBER); in bq2415x_detect_chip()
426 if (bq->chip == BQ24151A) in bq2415x_detect_chip()
427 return bq->chip; in bq2415x_detect_chip()
430 if (bq->chip == BQ24150A || in bq2415x_detect_chip()
431 bq->chip == BQ24152 || in bq2415x_detect_chip()
432 bq->chip == BQ24155) in bq2415x_detect_chip()
433 return bq->chip; in bq2415x_detect_chip()
436 if (bq->chip == BQ24153A) in bq2415x_detect_chip()
437 return bq->chip; in bq2415x_detect_chip()
447 if (bq->chip == BQ24156A) in bq2415x_detect_chip()
448 return bq->chip; in bq2415x_detect_chip()
451 if (bq->chip == BQ24157S) in bq2415x_detect_chip()
452 return bq->chip; in bq2415x_detect_chip()
464 static int bq2415x_detect_revision(struct bq2415x_device *bq) in bq2415x_detect_revision() argument
466 int ret = bq2415x_exec_command(bq, BQ2415X_REVISION); in bq2415x_detect_revision()
467 int chip = bq2415x_detect_chip(bq); in bq2415x_detect_revision()
504 static int bq2415x_get_vender_code(struct bq2415x_device *bq) in bq2415x_get_vender_code() argument
508 ret = bq2415x_exec_command(bq, BQ2415X_VENDER_CODE); in bq2415x_get_vender_code()
519 static void bq2415x_reset_chip(struct bq2415x_device *bq) in bq2415x_reset_chip() argument
521 bq2415x_i2c_write(bq, BQ2415X_REG_CURRENT, BQ2415X_RESET_CURRENT); in bq2415x_reset_chip()
522 bq2415x_i2c_write(bq, BQ2415X_REG_VOLTAGE, BQ2415X_RESET_VOLTAGE); in bq2415x_reset_chip()
523 bq2415x_i2c_write(bq, BQ2415X_REG_CONTROL, BQ2415X_RESET_CONTROL); in bq2415x_reset_chip()
524 bq2415x_i2c_write(bq, BQ2415X_REG_STATUS, BQ2415X_RESET_STATUS); in bq2415x_reset_chip()
525 bq->timer_error = NULL; in bq2415x_reset_chip()
531 static int bq2415x_set_current_limit(struct bq2415x_device *bq, int mA) in bq2415x_set_current_limit() argument
544 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CONTROL, val, in bq2415x_set_current_limit()
549 static int bq2415x_get_current_limit(struct bq2415x_device *bq) in bq2415x_get_current_limit() argument
553 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CONTROL, in bq2415x_get_current_limit()
569 static int bq2415x_set_weak_battery_voltage(struct bq2415x_device *bq, int mV) in bq2415x_set_weak_battery_voltage() argument
583 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CONTROL, val, in bq2415x_set_weak_battery_voltage()
588 static int bq2415x_get_weak_battery_voltage(struct bq2415x_device *bq) in bq2415x_get_weak_battery_voltage() argument
592 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CONTROL, in bq2415x_get_weak_battery_voltage()
600 static int bq2415x_set_battery_regulation_voltage(struct bq2415x_device *bq, in bq2415x_set_battery_regulation_voltage() argument
614 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_VOLTAGE, val, in bq2415x_set_battery_regulation_voltage()
619 static int bq2415x_get_battery_regulation_voltage(struct bq2415x_device *bq) in bq2415x_get_battery_regulation_voltage() argument
621 int ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_VOLTAGE, in bq2415x_get_battery_regulation_voltage()
630 static int bq2415x_set_charge_current(struct bq2415x_device *bq, int mA) in bq2415x_set_charge_current() argument
634 if (bq->init_data.resistor_sense <= 0) in bq2415x_set_charge_current()
637 val = (mA * bq->init_data.resistor_sense - 37400) / 6800; in bq2415x_set_charge_current()
643 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CURRENT, val, in bq2415x_set_charge_current()
649 static int bq2415x_get_charge_current(struct bq2415x_device *bq) in bq2415x_get_charge_current() argument
653 if (bq->init_data.resistor_sense <= 0) in bq2415x_get_charge_current()
656 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CURRENT, in bq2415x_get_charge_current()
660 return (37400 + 6800*ret) / bq->init_data.resistor_sense; in bq2415x_get_charge_current()
664 static int bq2415x_set_termination_current(struct bq2415x_device *bq, int mA) in bq2415x_set_termination_current() argument
668 if (bq->init_data.resistor_sense <= 0) in bq2415x_set_termination_current()
671 val = (mA * bq->init_data.resistor_sense - 3400) / 3400; in bq2415x_set_termination_current()
677 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CURRENT, val, in bq2415x_set_termination_current()
683 static int bq2415x_get_termination_current(struct bq2415x_device *bq) in bq2415x_get_termination_current() argument
687 if (bq->init_data.resistor_sense <= 0) in bq2415x_get_termination_current()
690 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CURRENT, in bq2415x_get_termination_current()
694 return (3400 + 3400*ret) / bq->init_data.resistor_sense; in bq2415x_get_termination_current()
698 #define bq2415x_set_default_value(bq, prop) \ argument
701 if (bq->init_data.prop != -1) \
702 ret = bq2415x_set_##prop(bq, bq->init_data.prop); \
708 static int bq2415x_set_defaults(struct bq2415x_device *bq) in bq2415x_set_defaults() argument
710 bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_DISABLE); in bq2415x_set_defaults()
711 bq2415x_exec_command(bq, BQ2415X_CHARGER_DISABLE); in bq2415x_set_defaults()
712 bq2415x_exec_command(bq, BQ2415X_CHARGE_TERMINATION_DISABLE); in bq2415x_set_defaults()
714 bq2415x_set_default_value(bq, current_limit); in bq2415x_set_defaults()
715 bq2415x_set_default_value(bq, weak_battery_voltage); in bq2415x_set_defaults()
716 bq2415x_set_default_value(bq, battery_regulation_voltage); in bq2415x_set_defaults()
718 if (bq->init_data.resistor_sense > 0) { in bq2415x_set_defaults()
719 bq2415x_set_default_value(bq, charge_current); in bq2415x_set_defaults()
720 bq2415x_set_default_value(bq, termination_current); in bq2415x_set_defaults()
721 bq2415x_exec_command(bq, BQ2415X_CHARGE_TERMINATION_ENABLE); in bq2415x_set_defaults()
724 bq2415x_exec_command(bq, BQ2415X_CHARGER_ENABLE); in bq2415x_set_defaults()
731 static int bq2415x_set_mode(struct bq2415x_device *bq, enum bq2415x_mode mode) in bq2415x_set_mode() argument
743 ret = bq2415x_exec_command(bq, BQ2415X_CHARGER_DISABLE); in bq2415x_set_mode()
746 ret = bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_DISABLE); in bq2415x_set_mode()
753 dev_dbg(bq->dev, "changing mode to: Offline\n"); in bq2415x_set_mode()
754 ret = bq2415x_set_current_limit(bq, 100); in bq2415x_set_mode()
757 dev_dbg(bq->dev, "changing mode to: N/A\n"); in bq2415x_set_mode()
758 ret = bq2415x_set_current_limit(bq, 100); in bq2415x_set_mode()
761 dev_dbg(bq->dev, "changing mode to: Host/HUB charger\n"); in bq2415x_set_mode()
762 ret = bq2415x_set_current_limit(bq, 500); in bq2415x_set_mode()
765 dev_dbg(bq->dev, "changing mode to: Dedicated charger\n"); in bq2415x_set_mode()
766 ret = bq2415x_set_current_limit(bq, 1800); in bq2415x_set_mode()
769 dev_dbg(bq->dev, "changing mode to: Boost\n"); in bq2415x_set_mode()
770 ret = bq2415x_set_current_limit(bq, 100); in bq2415x_set_mode()
778 ret = bq2415x_exec_command(bq, BQ2415X_CHARGER_ENABLE); in bq2415x_set_mode()
780 ret = bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_ENABLE); in bq2415x_set_mode()
785 bq2415x_set_default_value(bq, weak_battery_voltage); in bq2415x_set_mode()
786 bq2415x_set_default_value(bq, battery_regulation_voltage); in bq2415x_set_mode()
788 bq->mode = mode; in bq2415x_set_mode()
789 sysfs_notify(&bq->charger->dev.kobj, NULL, "mode"); in bq2415x_set_mode()
795 static bool bq2415x_update_reported_mode(struct bq2415x_device *bq, int mA) in bq2415x_update_reported_mode() argument
808 if (bq->reported_mode == mode) in bq2415x_update_reported_mode()
811 bq->reported_mode = mode; in bq2415x_update_reported_mode()
818 struct bq2415x_device *bq = in bq2415x_notifier_call() local
828 if (bq->notify_node) { in bq2415x_notifier_call()
830 psy->dev.parent->of_node != bq->notify_node) in bq2415x_notifier_call()
832 } else if (bq->init_data.notify_device) { in bq2415x_notifier_call()
833 if (strcmp(psy->desc->name, bq->init_data.notify_device) != 0) in bq2415x_notifier_call()
837 dev_dbg(bq->dev, "notifier call was called\n"); in bq2415x_notifier_call()
844 if (!bq2415x_update_reported_mode(bq, prop.intval)) in bq2415x_notifier_call()
848 if (bq->automode < 1) in bq2415x_notifier_call()
851 schedule_delayed_work(&bq->work, 0); in bq2415x_notifier_call()
859 static void bq2415x_set_autotimer(struct bq2415x_device *bq, int state) in bq2415x_set_autotimer() argument
863 if (bq->autotimer == state) { in bq2415x_set_autotimer()
868 bq->autotimer = state; in bq2415x_set_autotimer()
871 schedule_delayed_work(&bq->work, BQ2415X_TIMER_TIMEOUT * HZ); in bq2415x_set_autotimer()
872 bq2415x_exec_command(bq, BQ2415X_TIMER_RESET); in bq2415x_set_autotimer()
873 bq->timer_error = NULL; in bq2415x_set_autotimer()
875 cancel_delayed_work_sync(&bq->work); in bq2415x_set_autotimer()
882 static void bq2415x_timer_error(struct bq2415x_device *bq, const char *msg) in bq2415x_timer_error() argument
884 bq->timer_error = msg; in bq2415x_timer_error()
885 sysfs_notify(&bq->charger->dev.kobj, NULL, "timer"); in bq2415x_timer_error()
886 dev_err(bq->dev, "%s\n", msg); in bq2415x_timer_error()
887 if (bq->automode > 0) in bq2415x_timer_error()
888 bq->automode = 0; in bq2415x_timer_error()
889 bq2415x_set_mode(bq, BQ2415X_MODE_OFF); in bq2415x_timer_error()
890 bq2415x_set_autotimer(bq, 0); in bq2415x_timer_error()
896 struct bq2415x_device *bq = container_of(work, struct bq2415x_device, in bq2415x_timer_work() local
902 if (bq->automode > 0 && (bq->reported_mode != bq->mode)) { in bq2415x_timer_work()
903 sysfs_notify(&bq->charger->dev.kobj, NULL, "reported_mode"); in bq2415x_timer_work()
904 bq2415x_set_mode(bq, bq->reported_mode); in bq2415x_timer_work()
907 if (!bq->autotimer) in bq2415x_timer_work()
910 ret = bq2415x_exec_command(bq, BQ2415X_TIMER_RESET); in bq2415x_timer_work()
912 bq2415x_timer_error(bq, "Resetting timer failed"); in bq2415x_timer_work()
916 boost = bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_STATUS); in bq2415x_timer_work()
918 bq2415x_timer_error(bq, "Unknown error"); in bq2415x_timer_work()
922 error = bq2415x_exec_command(bq, BQ2415X_FAULT_STATUS); in bq2415x_timer_work()
924 bq2415x_timer_error(bq, "Unknown error"); in bq2415x_timer_work()
934 dev_err(bq->dev, "Timer expired\n"); in bq2415x_timer_work()
937 dev_err(bq->dev, "Battery voltage to low\n"); in bq2415x_timer_work()
942 bq2415x_timer_error(bq, in bq2415x_timer_work()
946 bq2415x_timer_error(bq, "Overload"); in bq2415x_timer_work()
949 bq2415x_timer_error(bq, in bq2415x_timer_work()
953 bq2415x_timer_error(bq, in bq2415x_timer_work()
957 bq2415x_timer_error(bq, "Unknown error"); in bq2415x_timer_work()
966 dev_err(bq->dev, "Sleep mode\n"); in bq2415x_timer_work()
969 dev_err(bq->dev, "Poor input source\n"); in bq2415x_timer_work()
972 dev_err(bq->dev, "Timer expired\n"); in bq2415x_timer_work()
975 dev_err(bq->dev, "No battery\n"); in bq2415x_timer_work()
980 bq2415x_timer_error(bq, in bq2415x_timer_work()
984 bq2415x_timer_error(bq, in bq2415x_timer_work()
988 bq2415x_timer_error(bq, in bq2415x_timer_work()
994 schedule_delayed_work(&bq->work, BQ2415X_TIMER_TIMEOUT * HZ); in bq2415x_timer_work()
1009 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_power_supply_get_property() local
1014 ret = bq2415x_exec_command(bq, BQ2415X_CHARGE_STATUS); in bq2415x_power_supply_get_property()
1027 val->strval = bq->model; in bq2415x_power_supply_get_property()
1035 static int bq2415x_power_supply_init(struct bq2415x_device *bq) in bq2415x_power_supply_init() argument
1040 struct power_supply_config psy_cfg = { .drv_data = bq, }; in bq2415x_power_supply_init()
1042 bq->charger_desc.name = bq->name; in bq2415x_power_supply_init()
1043 bq->charger_desc.type = POWER_SUPPLY_TYPE_USB; in bq2415x_power_supply_init()
1044 bq->charger_desc.properties = bq2415x_power_supply_props; in bq2415x_power_supply_init()
1045 bq->charger_desc.num_properties = in bq2415x_power_supply_init()
1047 bq->charger_desc.get_property = bq2415x_power_supply_get_property; in bq2415x_power_supply_init()
1049 ret = bq2415x_detect_chip(bq); in bq2415x_power_supply_init()
1055 ret = bq2415x_detect_revision(bq); in bq2415x_power_supply_init()
1061 bq->model = kasprintf(GFP_KERNEL, in bq2415x_power_supply_init()
1064 bq2415x_get_vender_code(bq)); in bq2415x_power_supply_init()
1065 if (!bq->model) { in bq2415x_power_supply_init()
1066 dev_err(bq->dev, "failed to allocate model name\n"); in bq2415x_power_supply_init()
1070 bq->charger = power_supply_register(bq->dev, &bq->charger_desc, in bq2415x_power_supply_init()
1072 if (IS_ERR(bq->charger)) { in bq2415x_power_supply_init()
1073 kfree(bq->model); in bq2415x_power_supply_init()
1074 return PTR_ERR(bq->charger); in bq2415x_power_supply_init()
1080 static void bq2415x_power_supply_exit(struct bq2415x_device *bq) in bq2415x_power_supply_exit() argument
1082 bq->autotimer = 0; in bq2415x_power_supply_exit()
1083 if (bq->automode > 0) in bq2415x_power_supply_exit()
1084 bq->automode = 0; in bq2415x_power_supply_exit()
1085 cancel_delayed_work_sync(&bq->work); in bq2415x_power_supply_exit()
1086 power_supply_unregister(bq->charger); in bq2415x_power_supply_exit()
1087 kfree(bq->model); in bq2415x_power_supply_exit()
1098 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_status() local
1113 ret = bq2415x_exec_command(bq, command); in bq2415x_sysfs_show_status()
1131 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_timer() local
1135 bq2415x_set_autotimer(bq, 1); in bq2415x_sysfs_set_timer()
1137 bq2415x_set_autotimer(bq, 0); in bq2415x_sysfs_set_timer()
1139 ret = bq2415x_exec_command(bq, BQ2415X_TIMER_RESET); in bq2415x_sysfs_set_timer()
1152 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_timer() local
1154 if (bq->timer_error) in bq2415x_sysfs_show_timer()
1155 return sprintf(buf, "%s\n", bq->timer_error); in bq2415x_sysfs_show_timer()
1157 if (bq->autotimer) in bq2415x_sysfs_show_timer()
1176 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_mode() local
1181 if (bq->automode < 0) in bq2415x_sysfs_set_mode()
1183 bq->automode = 1; in bq2415x_sysfs_set_mode()
1184 mode = bq->reported_mode; in bq2415x_sysfs_set_mode()
1186 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1187 bq->automode = 0; in bq2415x_sysfs_set_mode()
1190 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1191 bq->automode = 0; in bq2415x_sysfs_set_mode()
1194 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1195 bq->automode = 0; in bq2415x_sysfs_set_mode()
1198 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1199 bq->automode = 0; in bq2415x_sysfs_set_mode()
1202 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1203 bq->automode = 0; in bq2415x_sysfs_set_mode()
1206 bq2415x_reset_chip(bq); in bq2415x_sysfs_set_mode()
1207 bq2415x_set_defaults(bq); in bq2415x_sysfs_set_mode()
1208 if (bq->automode <= 0) in bq2415x_sysfs_set_mode()
1210 bq->automode = 1; in bq2415x_sysfs_set_mode()
1211 mode = bq->reported_mode; in bq2415x_sysfs_set_mode()
1216 ret = bq2415x_set_mode(bq, mode); in bq2415x_sysfs_set_mode()
1228 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_mode() local
1231 if (bq->automode > 0) in bq2415x_sysfs_show_mode()
1234 switch (bq->mode) { in bq2415x_sysfs_show_mode()
1252 if (bq->automode > 0) in bq2415x_sysfs_show_mode()
1265 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_reported_mode() local
1267 if (bq->automode < 0) in bq2415x_sysfs_show_reported_mode()
1270 switch (bq->reported_mode) { in bq2415x_sysfs_show_reported_mode()
1293 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_registers() local
1304 ret = bq2415x_i2c_write(bq, reg, val); in bq2415x_sysfs_set_registers()
1311 static ssize_t bq2415x_sysfs_print_reg(struct bq2415x_device *bq, in bq2415x_sysfs_print_reg() argument
1315 int ret = bq2415x_i2c_read(bq, reg); in bq2415x_sysfs_print_reg()
1328 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_registers() local
1331 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_STATUS, buf+ret); in bq2415x_sysfs_show_registers()
1332 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_CONTROL, buf+ret); in bq2415x_sysfs_show_registers()
1333 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_VOLTAGE, buf+ret); in bq2415x_sysfs_show_registers()
1334 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_VENDER, buf+ret); in bq2415x_sysfs_show_registers()
1335 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_CURRENT, buf+ret); in bq2415x_sysfs_show_registers()
1346 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_limit() local
1354 ret = bq2415x_set_current_limit(bq, val); in bq2415x_sysfs_set_limit()
1356 ret = bq2415x_set_weak_battery_voltage(bq, val); in bq2415x_sysfs_set_limit()
1358 ret = bq2415x_set_battery_regulation_voltage(bq, val); in bq2415x_sysfs_set_limit()
1360 ret = bq2415x_set_charge_current(bq, val); in bq2415x_sysfs_set_limit()
1362 ret = bq2415x_set_termination_current(bq, val); in bq2415x_sysfs_set_limit()
1377 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_limit() local
1381 ret = bq2415x_get_current_limit(bq); in bq2415x_sysfs_show_limit()
1383 ret = bq2415x_get_weak_battery_voltage(bq); in bq2415x_sysfs_show_limit()
1385 ret = bq2415x_get_battery_regulation_voltage(bq); in bq2415x_sysfs_show_limit()
1387 ret = bq2415x_get_charge_current(bq); in bq2415x_sysfs_show_limit()
1389 ret = bq2415x_get_termination_current(bq); in bq2415x_sysfs_show_limit()
1405 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_enable() local
1428 ret = bq2415x_exec_command(bq, command); in bq2415x_sysfs_set_enable()
1440 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_enable() local
1455 ret = bq2415x_exec_command(bq, command); in bq2415x_sysfs_show_enable()
1529 static int bq2415x_sysfs_init(struct bq2415x_device *bq) in bq2415x_sysfs_init() argument
1531 return sysfs_create_group(&bq->charger->dev.kobj, in bq2415x_sysfs_init()
1535 static void bq2415x_sysfs_exit(struct bq2415x_device *bq) in bq2415x_sysfs_exit() argument
1537 sysfs_remove_group(&bq->charger->dev.kobj, &bq2415x_sysfs_attr_group); in bq2415x_sysfs_exit()
1547 struct bq2415x_device *bq; in bq2415x_probe() local
1580 bq = devm_kzalloc(&client->dev, sizeof(*bq), GFP_KERNEL); in bq2415x_probe()
1581 if (!bq) { in bq2415x_probe()
1586 i2c_set_clientdata(client, bq); in bq2415x_probe()
1588 bq->id = num; in bq2415x_probe()
1589 bq->dev = &client->dev; in bq2415x_probe()
1591 bq->chip = id->driver_data; in bq2415x_probe()
1592 else if (ACPI_HANDLE(bq->dev)) in bq2415x_probe()
1593 bq->chip = acpi_id->driver_data; in bq2415x_probe()
1594 bq->name = name; in bq2415x_probe()
1595 bq->mode = BQ2415X_MODE_OFF; in bq2415x_probe()
1596 bq->reported_mode = BQ2415X_MODE_OFF; in bq2415x_probe()
1597 bq->autotimer = 0; in bq2415x_probe()
1598 bq->automode = 0; in bq2415x_probe()
1600 if (np || ACPI_HANDLE(bq->dev)) { in bq2415x_probe()
1601 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1603 &bq->init_data.current_limit); in bq2415x_probe()
1606 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1608 &bq->init_data.weak_battery_voltage); in bq2415x_probe()
1611 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1613 &bq->init_data.battery_regulation_voltage); in bq2415x_probe()
1616 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1618 &bq->init_data.charge_current); in bq2415x_probe()
1621 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1623 &bq->init_data.termination_current); in bq2415x_probe()
1626 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1628 &bq->init_data.resistor_sense); in bq2415x_probe()
1632 bq->notify_node = of_parse_phandle(np, in bq2415x_probe()
1635 memcpy(&bq->init_data, pdata, sizeof(bq->init_data)); in bq2415x_probe()
1638 bq2415x_reset_chip(bq); in bq2415x_probe()
1640 ret = bq2415x_power_supply_init(bq); in bq2415x_probe()
1642 dev_err(bq->dev, "failed to register power supply: %d\n", ret); in bq2415x_probe()
1646 ret = bq2415x_sysfs_init(bq); in bq2415x_probe()
1648 dev_err(bq->dev, "failed to create sysfs entries: %d\n", ret); in bq2415x_probe()
1652 ret = bq2415x_set_defaults(bq); in bq2415x_probe()
1654 dev_err(bq->dev, "failed to set default values: %d\n", ret); in bq2415x_probe()
1658 if (bq->notify_node || bq->init_data.notify_device) { in bq2415x_probe()
1659 bq->nb.notifier_call = bq2415x_notifier_call; in bq2415x_probe()
1660 ret = power_supply_reg_notifier(&bq->nb); in bq2415x_probe()
1662 dev_err(bq->dev, "failed to reg notifier: %d\n", ret); in bq2415x_probe()
1666 bq->automode = 1; in bq2415x_probe()
1667 dev_info(bq->dev, "automode supported, waiting for events\n"); in bq2415x_probe()
1669 bq->automode = -1; in bq2415x_probe()
1670 dev_info(bq->dev, "automode not supported\n"); in bq2415x_probe()
1674 if (bq->nb.notifier_call) { in bq2415x_probe()
1680 } else if (bq->init_data.notify_device) { in bq2415x_probe()
1682 bq->init_data.notify_device); in bq2415x_probe()
1691 bq2415x_update_reported_mode(bq, prop.intval); in bq2415x_probe()
1692 bq2415x_set_mode(bq, bq->reported_mode); in bq2415x_probe()
1696 INIT_DELAYED_WORK(&bq->work, bq2415x_timer_work); in bq2415x_probe()
1697 bq2415x_set_autotimer(bq, 1); in bq2415x_probe()
1699 dev_info(bq->dev, "driver registered\n"); in bq2415x_probe()
1703 bq2415x_sysfs_exit(bq); in bq2415x_probe()
1705 bq2415x_power_supply_exit(bq); in bq2415x_probe()
1707 if (bq && bq->notify_node) in bq2415x_probe()
1708 of_node_put(bq->notify_node); in bq2415x_probe()
1722 struct bq2415x_device *bq = i2c_get_clientdata(client); in bq2415x_remove() local
1724 if (bq->nb.notifier_call) in bq2415x_remove()
1725 power_supply_unreg_notifier(&bq->nb); in bq2415x_remove()
1727 if (bq->notify_node) in bq2415x_remove()
1728 of_node_put(bq->notify_node); in bq2415x_remove()
1730 bq2415x_sysfs_exit(bq); in bq2415x_remove()
1731 bq2415x_power_supply_exit(bq); in bq2415x_remove()
1733 bq2415x_reset_chip(bq); in bq2415x_remove()
1736 idr_remove(&bq2415x_id, bq->id); in bq2415x_remove()
1739 dev_info(bq->dev, "driver unregistered\n"); in bq2415x_remove()
1741 kfree(bq->name); in bq2415x_remove()