• Home
  • Raw
  • Download

Lines Matching refs:bq

314 static int bq25890_field_read(struct bq25890_device *bq,  in bq25890_field_read()  argument
320 ret = regmap_field_read(bq->rmap_fields[field_id], &val); in bq25890_field_read()
327 static int bq25890_field_write(struct bq25890_device *bq, in bq25890_field_write() argument
330 return regmap_field_write(bq->rmap_fields[field_id], val); in bq25890_field_write()
398 static irqreturn_t __bq25890_handle_irq(struct bq25890_device *bq);
404 struct bq25890_device *bq = power_supply_get_drvdata(psy); in bq25890_power_supply_get_property() local
409 mutex_lock(&bq->lock); in bq25890_power_supply_get_property()
411 __bq25890_handle_irq(bq); in bq25890_power_supply_get_property()
412 state = bq->state; in bq25890_power_supply_get_property()
415 bq25890_field_write(bq, F_CONV_START, 1); in bq25890_power_supply_get_property()
416 mutex_unlock(&bq->lock); in bq25890_power_supply_get_property()
419 regmap_field_read_poll_timeout(bq->rmap_fields[F_CONV_START], in bq25890_power_supply_get_property()
455 val->strval = bq25890_chip_name[bq->chip_version]; in bq25890_power_supply_get_property()
476 val->intval = bq25890_find_val(bq->init_data.ichg, TBL_ICHG); in bq25890_power_supply_get_property()
485 ret = bq25890_field_read(bq, F_BATV); /* read measured value */ in bq25890_power_supply_get_property()
494 val->intval = bq25890_find_val(bq->init_data.vreg, TBL_VREG); in bq25890_power_supply_get_property()
498 val->intval = bq25890_find_val(bq->init_data.iprechg, TBL_ITERM); in bq25890_power_supply_get_property()
502 val->intval = bq25890_find_val(bq->init_data.iterm, TBL_ITERM); in bq25890_power_supply_get_property()
506 ret = bq25890_field_read(bq, F_IILIM); in bq25890_power_supply_get_property()
514 ret = bq25890_field_read(bq, F_SYSV); /* read measured value */ in bq25890_power_supply_get_property()
523 ret = bq25890_field_read(bq, F_ICHGR); /* read measured value */ in bq25890_power_supply_get_property()
538 static int bq25890_get_chip_state(struct bq25890_device *bq, in bq25890_get_chip_state() argument
556 ret = bq25890_field_read(bq, state_fields[i].id); in bq25890_get_chip_state()
563 dev_dbg(bq->dev, "S:CHG/PG/VSYS=%d/%d/%d, F:CHG/BOOST/BAT=%d/%d/%d\n", in bq25890_get_chip_state()
570 static irqreturn_t __bq25890_handle_irq(struct bq25890_device *bq) in __bq25890_handle_irq() argument
575 ret = bq25890_get_chip_state(bq, &new_state); in __bq25890_handle_irq()
579 if (!memcmp(&bq->state, &new_state, sizeof(new_state))) in __bq25890_handle_irq()
582 if (!new_state.online && bq->state.online) { /* power removed */ in __bq25890_handle_irq()
584 ret = bq25890_field_write(bq, F_CONV_RATE, 0); in __bq25890_handle_irq()
587 } else if (new_state.online && !bq->state.online) { /* power inserted */ in __bq25890_handle_irq()
589 ret = bq25890_field_write(bq, F_CONV_RATE, 1); in __bq25890_handle_irq()
594 bq->state = new_state; in __bq25890_handle_irq()
595 power_supply_changed(bq->charger); in __bq25890_handle_irq()
599 dev_err(bq->dev, "Error communicating with the chip: %pe\n", in __bq25890_handle_irq()
606 struct bq25890_device *bq = private; in bq25890_irq_handler_thread() local
609 mutex_lock(&bq->lock); in bq25890_irq_handler_thread()
610 ret = __bq25890_handle_irq(bq); in bq25890_irq_handler_thread()
611 mutex_unlock(&bq->lock); in bq25890_irq_handler_thread()
616 static int bq25890_chip_reset(struct bq25890_device *bq) in bq25890_chip_reset() argument
621 ret = bq25890_field_write(bq, F_REG_RST, 1); in bq25890_chip_reset()
626 ret = bq25890_field_read(bq, F_REG_RST); in bq25890_chip_reset()
639 static int bq25890_hw_init(struct bq25890_device *bq) in bq25890_hw_init() argument
648 {F_ICHG, bq->init_data.ichg}, in bq25890_hw_init()
649 {F_VREG, bq->init_data.vreg}, in bq25890_hw_init()
650 {F_ITERM, bq->init_data.iterm}, in bq25890_hw_init()
651 {F_IPRECHG, bq->init_data.iprechg}, in bq25890_hw_init()
652 {F_SYSVMIN, bq->init_data.sysvmin}, in bq25890_hw_init()
653 {F_BOOSTV, bq->init_data.boostv}, in bq25890_hw_init()
654 {F_BOOSTI, bq->init_data.boosti}, in bq25890_hw_init()
655 {F_BOOSTF, bq->init_data.boostf}, in bq25890_hw_init()
656 {F_EN_ILIM, bq->init_data.ilim_en}, in bq25890_hw_init()
657 {F_TREG, bq->init_data.treg}, in bq25890_hw_init()
658 {F_BATCMP, bq->init_data.rbatcomp}, in bq25890_hw_init()
659 {F_VCLAMP, bq->init_data.vclamp}, in bq25890_hw_init()
662 ret = bq25890_chip_reset(bq); in bq25890_hw_init()
664 dev_dbg(bq->dev, "Reset failed %d\n", ret); in bq25890_hw_init()
669 ret = bq25890_field_write(bq, F_WD, 0); in bq25890_hw_init()
671 dev_dbg(bq->dev, "Disabling watchdog failed %d\n", ret); in bq25890_hw_init()
677 ret = bq25890_field_write(bq, init_data[i].id, in bq25890_hw_init()
680 dev_dbg(bq->dev, "Writing init data failed %d\n", ret); in bq25890_hw_init()
686 ret = bq25890_field_write(bq, F_CONV_RATE, !!bq->state.online); in bq25890_hw_init()
688 dev_dbg(bq->dev, "Config ADC failed %d\n", ret); in bq25890_hw_init()
692 ret = bq25890_get_chip_state(bq, &bq->state); in bq25890_hw_init()
694 dev_dbg(bq->dev, "Get state failed %d\n", ret); in bq25890_hw_init()
730 static int bq25890_power_supply_init(struct bq25890_device *bq) in bq25890_power_supply_init() argument
732 struct power_supply_config psy_cfg = { .drv_data = bq, }; in bq25890_power_supply_init()
737 bq->charger = power_supply_register(bq->dev, &bq25890_power_supply_desc, in bq25890_power_supply_init()
740 return PTR_ERR_OR_ZERO(bq->charger); in bq25890_power_supply_init()
746 struct bq25890_device *bq = in bq25890_usb_work() local
749 switch (bq->usb_event) { in bq25890_usb_work()
752 ret = bq25890_field_write(bq, F_OTG_CFG, 1); in bq25890_usb_work()
759 ret = bq25890_field_write(bq, F_OTG_CFG, 0); in bq25890_usb_work()
763 power_supply_changed(bq->charger); in bq25890_usb_work()
770 dev_err(bq->dev, "Error switching to boost/charger mode.\n"); in bq25890_usb_work()
776 struct bq25890_device *bq = in bq25890_usb_notifier() local
779 bq->usb_event = val; in bq25890_usb_notifier()
780 queue_work(system_power_efficient_wq, &bq->usb_work); in bq25890_usb_notifier()
785 static int bq25890_get_chip_version(struct bq25890_device *bq) in bq25890_get_chip_version() argument
789 id = bq25890_field_read(bq, F_PN); in bq25890_get_chip_version()
791 dev_err(bq->dev, "Cannot read chip ID.\n"); in bq25890_get_chip_version()
795 rev = bq25890_field_read(bq, F_DEV_REV); in bq25890_get_chip_version()
797 dev_err(bq->dev, "Cannot read chip revision.\n"); in bq25890_get_chip_version()
803 bq->chip_version = BQ25890; in bq25890_get_chip_version()
810 bq->chip_version = BQ25896; in bq25890_get_chip_version()
813 bq->chip_version = BQ25892; in bq25890_get_chip_version()
816 dev_err(bq->dev, in bq25890_get_chip_version()
819 bq->chip_version = BQ25892; in bq25890_get_chip_version()
824 bq->chip_version = BQ25895; in bq25890_get_chip_version()
828 dev_err(bq->dev, "Unknown chip ID %d\n", id); in bq25890_get_chip_version()
835 static int bq25890_irq_probe(struct bq25890_device *bq) in bq25890_irq_probe() argument
839 irq = devm_gpiod_get(bq->dev, BQ25890_IRQ_PIN, GPIOD_IN); in bq25890_irq_probe()
841 dev_err(bq->dev, "Could not probe irq pin.\n"); in bq25890_irq_probe()
848 static int bq25890_fw_read_u32_props(struct bq25890_device *bq) in bq25890_fw_read_u32_props() argument
853 struct bq25890_init_data *init = &bq->init_data; in bq25890_fw_read_u32_props()
880 ret = device_property_read_u32(bq->dev, props[i].name, in bq25890_fw_read_u32_props()
886 dev_err(bq->dev, "Unable to read property %d %s\n", ret, in bq25890_fw_read_u32_props()
899 static int bq25890_fw_probe(struct bq25890_device *bq) in bq25890_fw_probe() argument
902 struct bq25890_init_data *init = &bq->init_data; in bq25890_fw_probe()
904 ret = bq25890_fw_read_u32_props(bq); in bq25890_fw_probe()
908 init->ilim_en = device_property_read_bool(bq->dev, "ti,use-ilim-pin"); in bq25890_fw_probe()
909 init->boostf = device_property_read_bool(bq->dev, "ti,boost-low-freq"); in bq25890_fw_probe()
918 struct bq25890_device *bq; in bq25890_probe() local
922 bq = devm_kzalloc(dev, sizeof(*bq), GFP_KERNEL); in bq25890_probe()
923 if (!bq) in bq25890_probe()
926 bq->client = client; in bq25890_probe()
927 bq->dev = dev; in bq25890_probe()
929 mutex_init(&bq->lock); in bq25890_probe()
931 bq->rmap = devm_regmap_init_i2c(client, &bq25890_regmap_config); in bq25890_probe()
932 if (IS_ERR(bq->rmap)) { in bq25890_probe()
934 return PTR_ERR(bq->rmap); in bq25890_probe()
940 bq->rmap_fields[i] = devm_regmap_field_alloc(dev, bq->rmap, in bq25890_probe()
942 if (IS_ERR(bq->rmap_fields[i])) { in bq25890_probe()
944 return PTR_ERR(bq->rmap_fields[i]); in bq25890_probe()
948 i2c_set_clientdata(client, bq); in bq25890_probe()
950 ret = bq25890_get_chip_version(bq); in bq25890_probe()
957 ret = bq25890_fw_probe(bq); in bq25890_probe()
966 ret = bq25890_hw_init(bq); in bq25890_probe()
973 client->irq = bq25890_irq_probe(bq); in bq25890_probe()
981 bq->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); in bq25890_probe()
982 if (!IS_ERR_OR_NULL(bq->usb_phy)) { in bq25890_probe()
983 INIT_WORK(&bq->usb_work, bq25890_usb_work); in bq25890_probe()
984 bq->usb_nb.notifier_call = bq25890_usb_notifier; in bq25890_probe()
985 usb_register_notifier(bq->usb_phy, &bq->usb_nb); in bq25890_probe()
991 BQ25890_IRQ_PIN, bq); in bq25890_probe()
995 ret = bq25890_power_supply_init(bq); in bq25890_probe()
1004 if (!IS_ERR_OR_NULL(bq->usb_phy)) in bq25890_probe()
1005 usb_unregister_notifier(bq->usb_phy, &bq->usb_nb); in bq25890_probe()
1012 struct bq25890_device *bq = i2c_get_clientdata(client); in bq25890_remove() local
1014 power_supply_unregister(bq->charger); in bq25890_remove()
1016 if (!IS_ERR_OR_NULL(bq->usb_phy)) in bq25890_remove()
1017 usb_unregister_notifier(bq->usb_phy, &bq->usb_nb); in bq25890_remove()
1020 bq25890_chip_reset(bq); in bq25890_remove()
1028 struct bq25890_device *bq = dev_get_drvdata(dev); in bq25890_suspend() local
1034 return bq25890_field_write(bq, F_CONV_RATE, 0); in bq25890_suspend()
1040 struct bq25890_device *bq = dev_get_drvdata(dev); in bq25890_resume() local
1042 mutex_lock(&bq->lock); in bq25890_resume()
1044 ret = bq25890_get_chip_state(bq, &bq->state); in bq25890_resume()
1049 if (bq->state.online) { in bq25890_resume()
1050 ret = bq25890_field_write(bq, F_CONV_RATE, 1); in bq25890_resume()
1056 power_supply_changed(bq->charger); in bq25890_resume()
1059 mutex_unlock(&bq->lock); in bq25890_resume()