• Home
  • Raw
  • Download

Lines Matching refs:bq

300 static int bq25890_field_read(struct bq25890_device *bq,  in bq25890_field_read()  argument
306 ret = regmap_field_read(bq->rmap_fields[field_id], &val); in bq25890_field_read()
313 static int bq25890_field_write(struct bq25890_device *bq, in bq25890_field_write() argument
316 return regmap_field_write(bq->rmap_fields[field_id], val); in bq25890_field_write()
377 struct bq25890_device *bq = power_supply_get_drvdata(psy); in bq25890_power_supply_get_property() local
380 mutex_lock(&bq->lock); in bq25890_power_supply_get_property()
381 state = bq->state; in bq25890_power_supply_get_property()
382 mutex_unlock(&bq->lock); in bq25890_power_supply_get_property()
422 ret = bq25890_field_read(bq, F_ICHGR); /* read measured value */ in bq25890_power_supply_get_property()
440 ret = bq25890_field_read(bq, F_BATV); /* read measured value */ in bq25890_power_supply_get_property()
453 val->intval = bq25890_find_val(bq->init_data.iterm, TBL_ITERM); in bq25890_power_supply_get_property()
463 static int bq25890_get_chip_state(struct bq25890_device *bq, in bq25890_get_chip_state() argument
481 ret = bq25890_field_read(bq, state_fields[i].id); in bq25890_get_chip_state()
488 dev_dbg(bq->dev, "S:CHG/PG/VSYS=%d/%d/%d, F:CHG/BOOST/BAT=%d/%d/%d\n", in bq25890_get_chip_state()
495 static bool bq25890_state_changed(struct bq25890_device *bq, in bq25890_state_changed() argument
500 mutex_lock(&bq->lock); in bq25890_state_changed()
501 old_state = bq->state; in bq25890_state_changed()
502 mutex_unlock(&bq->lock); in bq25890_state_changed()
512 static void bq25890_handle_state_change(struct bq25890_device *bq, in bq25890_handle_state_change() argument
518 mutex_lock(&bq->lock); in bq25890_handle_state_change()
519 old_state = bq->state; in bq25890_handle_state_change()
520 mutex_unlock(&bq->lock); in bq25890_handle_state_change()
524 ret = bq25890_field_write(bq, F_CONV_START, 0); in bq25890_handle_state_change()
529 ret = bq25890_field_write(bq, F_CONV_START, 1); in bq25890_handle_state_change()
537 dev_err(bq->dev, "Error communicating with the chip.\n"); in bq25890_handle_state_change()
542 struct bq25890_device *bq = private; in bq25890_irq_handler_thread() local
546 ret = bq25890_get_chip_state(bq, &state); in bq25890_irq_handler_thread()
550 if (!bq25890_state_changed(bq, &state)) in bq25890_irq_handler_thread()
553 bq25890_handle_state_change(bq, &state); in bq25890_irq_handler_thread()
555 mutex_lock(&bq->lock); in bq25890_irq_handler_thread()
556 bq->state = state; in bq25890_irq_handler_thread()
557 mutex_unlock(&bq->lock); in bq25890_irq_handler_thread()
559 power_supply_changed(bq->charger); in bq25890_irq_handler_thread()
565 static int bq25890_chip_reset(struct bq25890_device *bq) in bq25890_chip_reset() argument
570 ret = bq25890_field_write(bq, F_REG_RST, 1); in bq25890_chip_reset()
575 ret = bq25890_field_read(bq, F_REG_RST); in bq25890_chip_reset()
588 static int bq25890_hw_init(struct bq25890_device *bq) in bq25890_hw_init() argument
598 {F_ICHG, bq->init_data.ichg}, in bq25890_hw_init()
599 {F_VREG, bq->init_data.vreg}, in bq25890_hw_init()
600 {F_ITERM, bq->init_data.iterm}, in bq25890_hw_init()
601 {F_IPRECHG, bq->init_data.iprechg}, in bq25890_hw_init()
602 {F_SYSVMIN, bq->init_data.sysvmin}, in bq25890_hw_init()
603 {F_BOOSTV, bq->init_data.boostv}, in bq25890_hw_init()
604 {F_BOOSTI, bq->init_data.boosti}, in bq25890_hw_init()
605 {F_BOOSTF, bq->init_data.boostf}, in bq25890_hw_init()
606 {F_EN_ILIM, bq->init_data.ilim_en}, in bq25890_hw_init()
607 {F_TREG, bq->init_data.treg} in bq25890_hw_init()
610 ret = bq25890_chip_reset(bq); in bq25890_hw_init()
615 ret = bq25890_field_write(bq, F_WD, 0); in bq25890_hw_init()
621 ret = bq25890_field_write(bq, init_data[i].id, in bq25890_hw_init()
628 ret = bq25890_field_write(bq, F_CONV_RATE, 1); in bq25890_hw_init()
632 ret = bq25890_get_chip_state(bq, &state); in bq25890_hw_init()
636 mutex_lock(&bq->lock); in bq25890_hw_init()
637 bq->state = state; in bq25890_hw_init()
638 mutex_unlock(&bq->lock); in bq25890_hw_init()
667 static int bq25890_power_supply_init(struct bq25890_device *bq) in bq25890_power_supply_init() argument
669 struct power_supply_config psy_cfg = { .drv_data = bq, }; in bq25890_power_supply_init()
674 bq->charger = power_supply_register(bq->dev, &bq25890_power_supply_desc, in bq25890_power_supply_init()
677 return PTR_ERR_OR_ZERO(bq->charger); in bq25890_power_supply_init()
683 struct bq25890_device *bq = in bq25890_usb_work() local
686 switch (bq->usb_event) { in bq25890_usb_work()
689 ret = bq25890_field_write(bq, F_OTG_CFG, 1); in bq25890_usb_work()
696 ret = bq25890_field_write(bq, F_OTG_CFG, 0); in bq25890_usb_work()
700 power_supply_changed(bq->charger); in bq25890_usb_work()
707 dev_err(bq->dev, "Error switching to boost/charger mode.\n"); in bq25890_usb_work()
713 struct bq25890_device *bq = in bq25890_usb_notifier() local
716 bq->usb_event = val; in bq25890_usb_notifier()
717 queue_work(system_power_efficient_wq, &bq->usb_work); in bq25890_usb_notifier()
722 static int bq25890_irq_probe(struct bq25890_device *bq) in bq25890_irq_probe() argument
726 irq = devm_gpiod_get(bq->dev, BQ25890_IRQ_PIN, GPIOD_IN); in bq25890_irq_probe()
728 dev_err(bq->dev, "Could not probe irq pin.\n"); in bq25890_irq_probe()
735 static int bq25890_fw_read_u32_props(struct bq25890_device *bq) in bq25890_fw_read_u32_props() argument
740 struct bq25890_init_data *init = &bq->init_data; in bq25890_fw_read_u32_props()
764 ret = device_property_read_u32(bq->dev, props[i].name, in bq25890_fw_read_u32_props()
780 static int bq25890_fw_probe(struct bq25890_device *bq) in bq25890_fw_probe() argument
783 struct bq25890_init_data *init = &bq->init_data; in bq25890_fw_probe()
785 ret = bq25890_fw_read_u32_props(bq); in bq25890_fw_probe()
789 init->ilim_en = device_property_read_bool(bq->dev, "ti,use-ilim-pin"); in bq25890_fw_probe()
790 init->boostf = device_property_read_bool(bq->dev, "ti,boost-low-freq"); in bq25890_fw_probe()
800 struct bq25890_device *bq; in bq25890_probe() local
809 bq = devm_kzalloc(dev, sizeof(*bq), GFP_KERNEL); in bq25890_probe()
810 if (!bq) in bq25890_probe()
813 bq->client = client; in bq25890_probe()
814 bq->dev = dev; in bq25890_probe()
816 mutex_init(&bq->lock); in bq25890_probe()
818 bq->rmap = devm_regmap_init_i2c(client, &bq25890_regmap_config); in bq25890_probe()
819 if (IS_ERR(bq->rmap)) { in bq25890_probe()
821 return PTR_ERR(bq->rmap); in bq25890_probe()
827 bq->rmap_fields[i] = devm_regmap_field_alloc(dev, bq->rmap, in bq25890_probe()
829 if (IS_ERR(bq->rmap_fields[i])) { in bq25890_probe()
831 return PTR_ERR(bq->rmap_fields[i]); in bq25890_probe()
835 i2c_set_clientdata(client, bq); in bq25890_probe()
837 bq->chip_id = bq25890_field_read(bq, F_PN); in bq25890_probe()
838 if (bq->chip_id < 0) { in bq25890_probe()
840 return bq->chip_id; in bq25890_probe()
843 if (bq->chip_id != BQ25890_ID) { in bq25890_probe()
844 dev_err(dev, "Chip with ID=%d, not supported!\n", bq->chip_id); in bq25890_probe()
849 ret = bq25890_fw_probe(bq); in bq25890_probe()
858 ret = bq25890_hw_init(bq); in bq25890_probe()
865 client->irq = bq25890_irq_probe(bq); in bq25890_probe()
873 bq->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); in bq25890_probe()
874 if (!IS_ERR_OR_NULL(bq->usb_phy)) { in bq25890_probe()
875 INIT_WORK(&bq->usb_work, bq25890_usb_work); in bq25890_probe()
876 bq->usb_nb.notifier_call = bq25890_usb_notifier; in bq25890_probe()
877 usb_register_notifier(bq->usb_phy, &bq->usb_nb); in bq25890_probe()
883 BQ25890_IRQ_PIN, bq); in bq25890_probe()
887 ret = bq25890_power_supply_init(bq); in bq25890_probe()
896 if (!IS_ERR_OR_NULL(bq->usb_phy)) in bq25890_probe()
897 usb_unregister_notifier(bq->usb_phy, &bq->usb_nb); in bq25890_probe()
904 struct bq25890_device *bq = i2c_get_clientdata(client); in bq25890_remove() local
906 power_supply_unregister(bq->charger); in bq25890_remove()
908 if (!IS_ERR_OR_NULL(bq->usb_phy)) in bq25890_remove()
909 usb_unregister_notifier(bq->usb_phy, &bq->usb_nb); in bq25890_remove()
912 bq25890_chip_reset(bq); in bq25890_remove()
920 struct bq25890_device *bq = dev_get_drvdata(dev); in bq25890_suspend() local
926 return bq25890_field_write(bq, F_CONV_START, 0); in bq25890_suspend()
933 struct bq25890_device *bq = dev_get_drvdata(dev); in bq25890_resume() local
935 ret = bq25890_get_chip_state(bq, &state); in bq25890_resume()
939 mutex_lock(&bq->lock); in bq25890_resume()
940 bq->state = state; in bq25890_resume()
941 mutex_unlock(&bq->lock); in bq25890_resume()
945 ret = bq25890_field_write(bq, F_CONV_START, 1); in bq25890_resume()
951 power_supply_changed(bq->charger); in bq25890_resume()