• Home
  • Raw
  • Download

Lines Matching refs:bq

187 static int bq2415x_i2c_read(struct bq2415x_device *bq, u8 reg)  in bq2415x_i2c_read()  argument
189 struct i2c_client *client = to_i2c_client(bq->dev); in bq2415x_i2c_read()
217 static int bq2415x_i2c_read_mask(struct bq2415x_device *bq, u8 reg, in bq2415x_i2c_read_mask() argument
225 ret = bq2415x_i2c_read(bq, reg); in bq2415x_i2c_read_mask()
232 static int bq2415x_i2c_read_bit(struct bq2415x_device *bq, u8 reg, u8 bit) in bq2415x_i2c_read_bit() argument
236 return bq2415x_i2c_read_mask(bq, reg, BIT(bit), bit); in bq2415x_i2c_read_bit()
242 static int bq2415x_i2c_write(struct bq2415x_device *bq, u8 reg, u8 val) in bq2415x_i2c_write() argument
244 struct i2c_client *client = to_i2c_client(bq->dev); in bq2415x_i2c_write()
271 static int bq2415x_i2c_write_mask(struct bq2415x_device *bq, u8 reg, u8 val, in bq2415x_i2c_write_mask() argument
279 ret = bq2415x_i2c_read(bq, reg); in bq2415x_i2c_write_mask()
286 return bq2415x_i2c_write(bq, reg, ret); in bq2415x_i2c_write_mask()
290 static int bq2415x_i2c_write_bit(struct bq2415x_device *bq, u8 reg, in bq2415x_i2c_write_bit() argument
295 return bq2415x_i2c_write_mask(bq, reg, val, BIT(bit), bit); in bq2415x_i2c_write_bit()
301 static int bq2415x_exec_command(struct bq2415x_device *bq, in bq2415x_exec_command() argument
308 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
311 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
314 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
317 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_STATUS, 1, in bq2415x_exec_command()
320 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_STATUS, 0, in bq2415x_exec_command()
323 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
326 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
329 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_STATUS, in bq2415x_exec_command()
333 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
336 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
339 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
342 ret = bq2415x_i2c_read_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
348 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
351 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_CONTROL, in bq2415x_exec_command()
354 return 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()
373 return bq2415x_i2c_read_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
376 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, in bq2415x_exec_command()
379 return bq2415x_i2c_write_bit(bq, BQ2415X_REG_VOLTAGE, 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()
392 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_VENDER, in bq2415x_exec_command()
395 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_VENDER, in bq2415x_exec_command()
398 return bq2415x_i2c_read_mask(bq, BQ2415X_REG_VENDER, in bq2415x_exec_command()
405 static enum bq2415x_chip bq2415x_detect_chip(struct bq2415x_device *bq) in bq2415x_detect_chip() argument
407 struct i2c_client *client = to_i2c_client(bq->dev); in bq2415x_detect_chip()
408 int ret = bq2415x_exec_command(bq, BQ2415X_PART_NUMBER); in bq2415x_detect_chip()
417 if (bq->chip == BQ24151A) in bq2415x_detect_chip()
418 return bq->chip; in bq2415x_detect_chip()
421 if (bq->chip == BQ24150A || in bq2415x_detect_chip()
422 bq->chip == BQ24152 || in bq2415x_detect_chip()
423 bq->chip == BQ24155) in bq2415x_detect_chip()
424 return bq->chip; in bq2415x_detect_chip()
427 if (bq->chip == BQ24153A) in bq2415x_detect_chip()
428 return bq->chip; in bq2415x_detect_chip()
438 if (bq->chip == BQ24156A) in bq2415x_detect_chip()
439 return bq->chip; in bq2415x_detect_chip()
442 if (bq->chip == BQ24157S) in bq2415x_detect_chip()
443 return bq->chip; in bq2415x_detect_chip()
455 static int bq2415x_detect_revision(struct bq2415x_device *bq) in bq2415x_detect_revision() argument
457 int ret = bq2415x_exec_command(bq, BQ2415X_REVISION); in bq2415x_detect_revision()
458 int chip = bq2415x_detect_chip(bq); in bq2415x_detect_revision()
495 static int bq2415x_get_vender_code(struct bq2415x_device *bq) in bq2415x_get_vender_code() argument
499 ret = bq2415x_exec_command(bq, BQ2415X_VENDER_CODE); in bq2415x_get_vender_code()
510 static void bq2415x_reset_chip(struct bq2415x_device *bq) in bq2415x_reset_chip() argument
512 bq2415x_i2c_write(bq, BQ2415X_REG_CURRENT, BQ2415X_RESET_CURRENT); in bq2415x_reset_chip()
513 bq2415x_i2c_write(bq, BQ2415X_REG_VOLTAGE, BQ2415X_RESET_VOLTAGE); in bq2415x_reset_chip()
514 bq2415x_i2c_write(bq, BQ2415X_REG_CONTROL, BQ2415X_RESET_CONTROL); in bq2415x_reset_chip()
515 bq2415x_i2c_write(bq, BQ2415X_REG_STATUS, BQ2415X_RESET_STATUS); in bq2415x_reset_chip()
516 bq->timer_error = NULL; in bq2415x_reset_chip()
522 static int bq2415x_set_current_limit(struct bq2415x_device *bq, int mA) in bq2415x_set_current_limit() argument
535 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CONTROL, val, in bq2415x_set_current_limit()
540 static int bq2415x_get_current_limit(struct bq2415x_device *bq) in bq2415x_get_current_limit() argument
544 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CONTROL, in bq2415x_get_current_limit()
560 static int bq2415x_set_weak_battery_voltage(struct bq2415x_device *bq, int mV) in bq2415x_set_weak_battery_voltage() argument
574 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CONTROL, val, in bq2415x_set_weak_battery_voltage()
579 static int bq2415x_get_weak_battery_voltage(struct bq2415x_device *bq) in bq2415x_get_weak_battery_voltage() argument
583 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CONTROL, in bq2415x_get_weak_battery_voltage()
591 static int bq2415x_set_battery_regulation_voltage(struct bq2415x_device *bq, in bq2415x_set_battery_regulation_voltage() argument
605 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_VOLTAGE, val, in bq2415x_set_battery_regulation_voltage()
610 static int bq2415x_get_battery_regulation_voltage(struct bq2415x_device *bq) in bq2415x_get_battery_regulation_voltage() argument
612 int ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_VOLTAGE, in bq2415x_get_battery_regulation_voltage()
621 static int bq2415x_set_charge_current(struct bq2415x_device *bq, int mA) in bq2415x_set_charge_current() argument
625 if (bq->init_data.resistor_sense <= 0) in bq2415x_set_charge_current()
628 val = (mA * bq->init_data.resistor_sense - 37400) / 6800; in bq2415x_set_charge_current()
634 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CURRENT, val, in bq2415x_set_charge_current()
640 static int bq2415x_get_charge_current(struct bq2415x_device *bq) in bq2415x_get_charge_current() argument
644 if (bq->init_data.resistor_sense <= 0) in bq2415x_get_charge_current()
647 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CURRENT, in bq2415x_get_charge_current()
651 return (37400 + 6800*ret) / bq->init_data.resistor_sense; in bq2415x_get_charge_current()
655 static int bq2415x_set_termination_current(struct bq2415x_device *bq, int mA) in bq2415x_set_termination_current() argument
659 if (bq->init_data.resistor_sense <= 0) in bq2415x_set_termination_current()
662 val = (mA * bq->init_data.resistor_sense - 3400) / 3400; in bq2415x_set_termination_current()
668 return bq2415x_i2c_write_mask(bq, BQ2415X_REG_CURRENT, val, in bq2415x_set_termination_current()
674 static int bq2415x_get_termination_current(struct bq2415x_device *bq) in bq2415x_get_termination_current() argument
678 if (bq->init_data.resistor_sense <= 0) in bq2415x_get_termination_current()
681 ret = bq2415x_i2c_read_mask(bq, BQ2415X_REG_CURRENT, in bq2415x_get_termination_current()
685 return (3400 + 3400*ret) / bq->init_data.resistor_sense; in bq2415x_get_termination_current()
689 #define bq2415x_set_default_value(bq, prop) \ argument
692 if (bq->init_data.prop != -1) \
693 ret = bq2415x_set_##prop(bq, bq->init_data.prop); \
699 static int bq2415x_set_defaults(struct bq2415x_device *bq) in bq2415x_set_defaults() argument
701 bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_DISABLE); in bq2415x_set_defaults()
702 bq2415x_exec_command(bq, BQ2415X_CHARGER_DISABLE); in bq2415x_set_defaults()
703 bq2415x_exec_command(bq, BQ2415X_CHARGE_TERMINATION_DISABLE); in bq2415x_set_defaults()
705 bq2415x_set_default_value(bq, current_limit); in bq2415x_set_defaults()
706 bq2415x_set_default_value(bq, weak_battery_voltage); in bq2415x_set_defaults()
707 bq2415x_set_default_value(bq, battery_regulation_voltage); in bq2415x_set_defaults()
709 if (bq->init_data.resistor_sense > 0) { in bq2415x_set_defaults()
710 bq2415x_set_default_value(bq, charge_current); in bq2415x_set_defaults()
711 bq2415x_set_default_value(bq, termination_current); in bq2415x_set_defaults()
712 bq2415x_exec_command(bq, BQ2415X_CHARGE_TERMINATION_ENABLE); in bq2415x_set_defaults()
715 bq2415x_exec_command(bq, BQ2415X_CHARGER_ENABLE); in bq2415x_set_defaults()
722 static int bq2415x_set_mode(struct bq2415x_device *bq, enum bq2415x_mode mode) in bq2415x_set_mode() argument
734 ret = bq2415x_exec_command(bq, BQ2415X_CHARGER_DISABLE); in bq2415x_set_mode()
737 ret = bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_DISABLE); in bq2415x_set_mode()
744 dev_dbg(bq->dev, "changing mode to: Offline\n"); in bq2415x_set_mode()
745 ret = bq2415x_set_current_limit(bq, 100); in bq2415x_set_mode()
748 dev_dbg(bq->dev, "changing mode to: N/A\n"); in bq2415x_set_mode()
749 ret = bq2415x_set_current_limit(bq, 100); in bq2415x_set_mode()
752 dev_dbg(bq->dev, "changing mode to: Host/HUB charger\n"); in bq2415x_set_mode()
753 ret = bq2415x_set_current_limit(bq, 500); in bq2415x_set_mode()
756 dev_dbg(bq->dev, "changing mode to: Dedicated charger\n"); in bq2415x_set_mode()
757 ret = bq2415x_set_current_limit(bq, 1800); in bq2415x_set_mode()
760 dev_dbg(bq->dev, "changing mode to: Boost\n"); in bq2415x_set_mode()
761 ret = bq2415x_set_current_limit(bq, 100); in bq2415x_set_mode()
769 ret = bq2415x_exec_command(bq, BQ2415X_CHARGER_ENABLE); in bq2415x_set_mode()
771 ret = bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_ENABLE); in bq2415x_set_mode()
776 bq2415x_set_default_value(bq, weak_battery_voltage); in bq2415x_set_mode()
777 bq2415x_set_default_value(bq, battery_regulation_voltage); in bq2415x_set_mode()
779 bq->mode = mode; in bq2415x_set_mode()
780 sysfs_notify(&bq->charger->dev.kobj, NULL, "mode"); in bq2415x_set_mode()
786 static bool bq2415x_update_reported_mode(struct bq2415x_device *bq, int mA) in bq2415x_update_reported_mode() argument
799 if (bq->reported_mode == mode) in bq2415x_update_reported_mode()
802 bq->reported_mode = mode; in bq2415x_update_reported_mode()
809 struct bq2415x_device *bq = in bq2415x_notifier_call() local
819 if (bq->notify_node) { in bq2415x_notifier_call()
821 psy->dev.parent->of_node != bq->notify_node) in bq2415x_notifier_call()
823 } else if (bq->init_data.notify_device) { in bq2415x_notifier_call()
824 if (strcmp(psy->desc->name, bq->init_data.notify_device) != 0) in bq2415x_notifier_call()
828 dev_dbg(bq->dev, "notifier call was called\n"); in bq2415x_notifier_call()
835 if (!bq2415x_update_reported_mode(bq, prop.intval)) in bq2415x_notifier_call()
839 if (bq->automode < 1) in bq2415x_notifier_call()
842 schedule_delayed_work(&bq->work, 0); in bq2415x_notifier_call()
850 static void bq2415x_set_autotimer(struct bq2415x_device *bq, int state) in bq2415x_set_autotimer() argument
854 if (bq->autotimer == state) { in bq2415x_set_autotimer()
859 bq->autotimer = state; in bq2415x_set_autotimer()
862 schedule_delayed_work(&bq->work, BQ2415X_TIMER_TIMEOUT * HZ); in bq2415x_set_autotimer()
863 bq2415x_exec_command(bq, BQ2415X_TIMER_RESET); in bq2415x_set_autotimer()
864 bq->timer_error = NULL; in bq2415x_set_autotimer()
866 cancel_delayed_work_sync(&bq->work); in bq2415x_set_autotimer()
873 static void bq2415x_timer_error(struct bq2415x_device *bq, const char *msg) in bq2415x_timer_error() argument
875 bq->timer_error = msg; in bq2415x_timer_error()
876 sysfs_notify(&bq->charger->dev.kobj, NULL, "timer"); in bq2415x_timer_error()
877 dev_err(bq->dev, "%s\n", msg); in bq2415x_timer_error()
878 if (bq->automode > 0) in bq2415x_timer_error()
879 bq->automode = 0; in bq2415x_timer_error()
880 bq2415x_set_mode(bq, BQ2415X_MODE_OFF); in bq2415x_timer_error()
881 bq2415x_set_autotimer(bq, 0); in bq2415x_timer_error()
887 struct bq2415x_device *bq = container_of(work, struct bq2415x_device, in bq2415x_timer_work() local
893 if (bq->automode > 0 && (bq->reported_mode != bq->mode)) { in bq2415x_timer_work()
894 sysfs_notify(&bq->charger->dev.kobj, NULL, "reported_mode"); in bq2415x_timer_work()
895 bq2415x_set_mode(bq, bq->reported_mode); in bq2415x_timer_work()
898 if (!bq->autotimer) in bq2415x_timer_work()
901 ret = bq2415x_exec_command(bq, BQ2415X_TIMER_RESET); in bq2415x_timer_work()
903 bq2415x_timer_error(bq, "Resetting timer failed"); in bq2415x_timer_work()
907 boost = bq2415x_exec_command(bq, BQ2415X_BOOST_MODE_STATUS); in bq2415x_timer_work()
909 bq2415x_timer_error(bq, "Unknown error"); in bq2415x_timer_work()
913 error = bq2415x_exec_command(bq, BQ2415X_FAULT_STATUS); in bq2415x_timer_work()
915 bq2415x_timer_error(bq, "Unknown error"); in bq2415x_timer_work()
925 dev_err(bq->dev, "Timer expired\n"); in bq2415x_timer_work()
928 dev_err(bq->dev, "Battery voltage to low\n"); in bq2415x_timer_work()
933 bq2415x_timer_error(bq, in bq2415x_timer_work()
937 bq2415x_timer_error(bq, "Overload"); in bq2415x_timer_work()
940 bq2415x_timer_error(bq, in bq2415x_timer_work()
944 bq2415x_timer_error(bq, in bq2415x_timer_work()
948 bq2415x_timer_error(bq, "Unknown error"); in bq2415x_timer_work()
957 dev_err(bq->dev, "Sleep mode\n"); in bq2415x_timer_work()
960 dev_err(bq->dev, "Poor input source\n"); in bq2415x_timer_work()
963 dev_err(bq->dev, "Timer expired\n"); in bq2415x_timer_work()
966 dev_err(bq->dev, "No battery\n"); in bq2415x_timer_work()
971 bq2415x_timer_error(bq, in bq2415x_timer_work()
975 bq2415x_timer_error(bq, in bq2415x_timer_work()
979 bq2415x_timer_error(bq, in bq2415x_timer_work()
985 schedule_delayed_work(&bq->work, BQ2415X_TIMER_TIMEOUT * HZ); in bq2415x_timer_work()
1000 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_power_supply_get_property() local
1005 ret = bq2415x_exec_command(bq, BQ2415X_CHARGE_STATUS); in bq2415x_power_supply_get_property()
1018 val->strval = bq->model; in bq2415x_power_supply_get_property()
1026 static void bq2415x_power_supply_exit(struct bq2415x_device *bq) in bq2415x_power_supply_exit() argument
1028 bq->autotimer = 0; in bq2415x_power_supply_exit()
1029 if (bq->automode > 0) in bq2415x_power_supply_exit()
1030 bq->automode = 0; in bq2415x_power_supply_exit()
1031 cancel_delayed_work_sync(&bq->work); in bq2415x_power_supply_exit()
1032 power_supply_unregister(bq->charger); in bq2415x_power_supply_exit()
1033 kfree(bq->model); in bq2415x_power_supply_exit()
1044 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_status() local
1059 ret = bq2415x_exec_command(bq, command); in bq2415x_sysfs_show_status()
1077 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_timer() local
1081 bq2415x_set_autotimer(bq, 1); in bq2415x_sysfs_set_timer()
1083 bq2415x_set_autotimer(bq, 0); in bq2415x_sysfs_set_timer()
1085 ret = bq2415x_exec_command(bq, BQ2415X_TIMER_RESET); in bq2415x_sysfs_set_timer()
1098 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_timer() local
1100 if (bq->timer_error) in bq2415x_sysfs_show_timer()
1101 return sprintf(buf, "%s\n", bq->timer_error); in bq2415x_sysfs_show_timer()
1103 if (bq->autotimer) in bq2415x_sysfs_show_timer()
1122 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_mode() local
1127 if (bq->automode < 0) in bq2415x_sysfs_set_mode()
1129 bq->automode = 1; in bq2415x_sysfs_set_mode()
1130 mode = bq->reported_mode; in bq2415x_sysfs_set_mode()
1132 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1133 bq->automode = 0; in bq2415x_sysfs_set_mode()
1136 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1137 bq->automode = 0; in bq2415x_sysfs_set_mode()
1140 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1141 bq->automode = 0; in bq2415x_sysfs_set_mode()
1144 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1145 bq->automode = 0; in bq2415x_sysfs_set_mode()
1148 if (bq->automode > 0) in bq2415x_sysfs_set_mode()
1149 bq->automode = 0; in bq2415x_sysfs_set_mode()
1152 bq2415x_reset_chip(bq); in bq2415x_sysfs_set_mode()
1153 bq2415x_set_defaults(bq); in bq2415x_sysfs_set_mode()
1154 if (bq->automode <= 0) in bq2415x_sysfs_set_mode()
1156 bq->automode = 1; in bq2415x_sysfs_set_mode()
1157 mode = bq->reported_mode; in bq2415x_sysfs_set_mode()
1162 ret = bq2415x_set_mode(bq, mode); in bq2415x_sysfs_set_mode()
1174 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_mode() local
1177 if (bq->automode > 0) in bq2415x_sysfs_show_mode()
1180 switch (bq->mode) { in bq2415x_sysfs_show_mode()
1198 if (bq->automode > 0) in bq2415x_sysfs_show_mode()
1211 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_reported_mode() local
1213 if (bq->automode < 0) in bq2415x_sysfs_show_reported_mode()
1216 switch (bq->reported_mode) { in bq2415x_sysfs_show_reported_mode()
1239 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_registers() local
1250 ret = bq2415x_i2c_write(bq, reg, val); in bq2415x_sysfs_set_registers()
1257 static ssize_t bq2415x_sysfs_print_reg(struct bq2415x_device *bq, in bq2415x_sysfs_print_reg() argument
1261 int ret = bq2415x_i2c_read(bq, reg); in bq2415x_sysfs_print_reg()
1274 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_registers() local
1277 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_STATUS, buf+ret); in bq2415x_sysfs_show_registers()
1278 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_CONTROL, buf+ret); in bq2415x_sysfs_show_registers()
1279 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_VOLTAGE, buf+ret); in bq2415x_sysfs_show_registers()
1280 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_VENDER, buf+ret); in bq2415x_sysfs_show_registers()
1281 ret += bq2415x_sysfs_print_reg(bq, BQ2415X_REG_CURRENT, buf+ret); in bq2415x_sysfs_show_registers()
1292 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_limit() local
1300 ret = bq2415x_set_current_limit(bq, val); in bq2415x_sysfs_set_limit()
1302 ret = bq2415x_set_weak_battery_voltage(bq, val); in bq2415x_sysfs_set_limit()
1304 ret = bq2415x_set_battery_regulation_voltage(bq, val); in bq2415x_sysfs_set_limit()
1306 ret = bq2415x_set_charge_current(bq, val); in bq2415x_sysfs_set_limit()
1308 ret = bq2415x_set_termination_current(bq, val); in bq2415x_sysfs_set_limit()
1323 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_limit() local
1327 ret = bq2415x_get_current_limit(bq); in bq2415x_sysfs_show_limit()
1329 ret = bq2415x_get_weak_battery_voltage(bq); in bq2415x_sysfs_show_limit()
1331 ret = bq2415x_get_battery_regulation_voltage(bq); in bq2415x_sysfs_show_limit()
1333 ret = bq2415x_get_charge_current(bq); in bq2415x_sysfs_show_limit()
1335 ret = bq2415x_get_termination_current(bq); in bq2415x_sysfs_show_limit()
1351 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_set_enable() local
1374 ret = bq2415x_exec_command(bq, command); in bq2415x_sysfs_set_enable()
1386 struct bq2415x_device *bq = power_supply_get_drvdata(psy); in bq2415x_sysfs_show_enable() local
1401 ret = bq2415x_exec_command(bq, command); in bq2415x_sysfs_show_enable()
1473 static int bq2415x_power_supply_init(struct bq2415x_device *bq) in bq2415x_power_supply_init() argument
1479 .drv_data = bq, in bq2415x_power_supply_init()
1480 .of_node = bq->dev->of_node, in bq2415x_power_supply_init()
1484 bq->charger_desc.name = bq->name; in bq2415x_power_supply_init()
1485 bq->charger_desc.type = POWER_SUPPLY_TYPE_USB; in bq2415x_power_supply_init()
1486 bq->charger_desc.properties = bq2415x_power_supply_props; in bq2415x_power_supply_init()
1487 bq->charger_desc.num_properties = in bq2415x_power_supply_init()
1489 bq->charger_desc.get_property = bq2415x_power_supply_get_property; in bq2415x_power_supply_init()
1491 ret = bq2415x_detect_chip(bq); in bq2415x_power_supply_init()
1497 ret = bq2415x_detect_revision(bq); in bq2415x_power_supply_init()
1503 bq->model = kasprintf(GFP_KERNEL, in bq2415x_power_supply_init()
1506 bq2415x_get_vender_code(bq)); in bq2415x_power_supply_init()
1507 if (!bq->model) { in bq2415x_power_supply_init()
1508 dev_err(bq->dev, "failed to allocate model name\n"); in bq2415x_power_supply_init()
1512 bq->charger = power_supply_register(bq->dev, &bq->charger_desc, in bq2415x_power_supply_init()
1514 if (IS_ERR(bq->charger)) { in bq2415x_power_supply_init()
1515 kfree(bq->model); in bq2415x_power_supply_init()
1516 return PTR_ERR(bq->charger); in bq2415x_power_supply_init()
1529 struct bq2415x_device *bq; in bq2415x_probe() local
1567 bq = devm_kzalloc(&client->dev, sizeof(*bq), GFP_KERNEL); in bq2415x_probe()
1568 if (!bq) { in bq2415x_probe()
1573 i2c_set_clientdata(client, bq); in bq2415x_probe()
1575 bq->id = num; in bq2415x_probe()
1576 bq->dev = &client->dev; in bq2415x_probe()
1578 bq->chip = id->driver_data; in bq2415x_probe()
1579 else if (ACPI_HANDLE(bq->dev)) in bq2415x_probe()
1580 bq->chip = acpi_id->driver_data; in bq2415x_probe()
1581 bq->name = name; in bq2415x_probe()
1582 bq->mode = BQ2415X_MODE_OFF; in bq2415x_probe()
1583 bq->reported_mode = BQ2415X_MODE_OFF; in bq2415x_probe()
1584 bq->autotimer = 0; in bq2415x_probe()
1585 bq->automode = 0; in bq2415x_probe()
1587 if (np || ACPI_HANDLE(bq->dev)) { in bq2415x_probe()
1588 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1590 &bq->init_data.current_limit); in bq2415x_probe()
1593 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1595 &bq->init_data.weak_battery_voltage); in bq2415x_probe()
1598 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1600 &bq->init_data.battery_regulation_voltage); in bq2415x_probe()
1603 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1605 &bq->init_data.charge_current); in bq2415x_probe()
1608 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1610 &bq->init_data.termination_current); in bq2415x_probe()
1613 ret = device_property_read_u32(bq->dev, in bq2415x_probe()
1615 &bq->init_data.resistor_sense); in bq2415x_probe()
1619 bq->notify_node = of_parse_phandle(np, in bq2415x_probe()
1622 memcpy(&bq->init_data, pdata, sizeof(bq->init_data)); in bq2415x_probe()
1625 bq2415x_reset_chip(bq); in bq2415x_probe()
1627 ret = bq2415x_power_supply_init(bq); in bq2415x_probe()
1629 dev_err(bq->dev, "failed to register power supply: %d\n", ret); in bq2415x_probe()
1633 ret = bq2415x_set_defaults(bq); in bq2415x_probe()
1635 dev_err(bq->dev, "failed to set default values: %d\n", ret); in bq2415x_probe()
1639 if (bq->notify_node || bq->init_data.notify_device) { in bq2415x_probe()
1640 bq->nb.notifier_call = bq2415x_notifier_call; in bq2415x_probe()
1641 ret = power_supply_reg_notifier(&bq->nb); in bq2415x_probe()
1643 dev_err(bq->dev, "failed to reg notifier: %d\n", ret); in bq2415x_probe()
1647 bq->automode = 1; in bq2415x_probe()
1648 dev_info(bq->dev, "automode supported, waiting for events\n"); in bq2415x_probe()
1650 bq->automode = -1; in bq2415x_probe()
1651 dev_info(bq->dev, "automode not supported\n"); in bq2415x_probe()
1655 if (bq->nb.notifier_call) { in bq2415x_probe()
1661 } else if (bq->init_data.notify_device) { in bq2415x_probe()
1663 bq->init_data.notify_device); in bq2415x_probe()
1672 bq2415x_update_reported_mode(bq, prop.intval); in bq2415x_probe()
1673 bq2415x_set_mode(bq, bq->reported_mode); in bq2415x_probe()
1677 INIT_DELAYED_WORK(&bq->work, bq2415x_timer_work); in bq2415x_probe()
1678 bq2415x_set_autotimer(bq, 1); in bq2415x_probe()
1680 dev_info(bq->dev, "driver registered\n"); in bq2415x_probe()
1684 bq2415x_power_supply_exit(bq); in bq2415x_probe()
1686 if (bq) in bq2415x_probe()
1687 of_node_put(bq->notify_node); in bq2415x_probe()
1701 struct bq2415x_device *bq = i2c_get_clientdata(client); in bq2415x_remove() local
1703 if (bq->nb.notifier_call) in bq2415x_remove()
1704 power_supply_unreg_notifier(&bq->nb); in bq2415x_remove()
1706 of_node_put(bq->notify_node); in bq2415x_remove()
1707 bq2415x_power_supply_exit(bq); in bq2415x_remove()
1709 bq2415x_reset_chip(bq); in bq2415x_remove()
1712 idr_remove(&bq2415x_id, bq->id); in bq2415x_remove()
1715 dev_info(bq->dev, "driver unregistered\n"); in bq2415x_remove()
1717 kfree(bq->name); in bq2415x_remove()