• Home
  • Raw
  • Download

Lines Matching refs:ext

104 static int cht_wc_extcon_get_id(struct cht_wc_extcon_data *ext, int pwrsrc_sts)  in cht_wc_extcon_get_id()  argument
118 static int cht_wc_extcon_get_charger(struct cht_wc_extcon_data *ext, in cht_wc_extcon_get_charger() argument
127 ret = regmap_read(ext->regmap, CHT_WC_USBSRC, &usbsrc); in cht_wc_extcon_get_charger()
129 dev_err(ext->dev, "Error reading usbsrc: %d\n", ret); in cht_wc_extcon_get_charger()
146 dev_warn(ext->dev, "Could not detect charger type\n"); in cht_wc_extcon_get_charger()
148 dev_warn(ext->dev, "Timeout detecting charger type\n"); in cht_wc_extcon_get_charger()
155 dev_warn(ext->dev, in cht_wc_extcon_get_charger()
174 static void cht_wc_extcon_set_phymux(struct cht_wc_extcon_data *ext, u8 state) in cht_wc_extcon_set_phymux() argument
178 ret = regmap_write(ext->regmap, CHT_WC_PHYCTRL, state); in cht_wc_extcon_set_phymux()
180 dev_err(ext->dev, "Error writing phyctrl: %d\n", ret); in cht_wc_extcon_set_phymux()
183 static void cht_wc_extcon_set_5v_boost(struct cht_wc_extcon_data *ext, in cht_wc_extcon_set_5v_boost() argument
196 ret = regmap_write(ext->regmap, CHT_WC_VBUS_GPIO_CTLO, val); in cht_wc_extcon_set_5v_boost()
198 dev_err(ext->dev, "Error writing Vbus GPIO CTLO: %d\n", ret); in cht_wc_extcon_set_5v_boost()
202 static void cht_wc_extcon_set_state(struct cht_wc_extcon_data *ext, in cht_wc_extcon_set_state() argument
205 extcon_set_state_sync(ext->edev, cable, state); in cht_wc_extcon_set_state()
207 extcon_set_state_sync(ext->edev, EXTCON_USB, state); in cht_wc_extcon_set_state()
210 static void cht_wc_extcon_pwrsrc_event(struct cht_wc_extcon_data *ext) in cht_wc_extcon_pwrsrc_event() argument
215 bool ignore_get_charger_errors = ext->usb_host; in cht_wc_extcon_pwrsrc_event()
217 ret = regmap_read(ext->regmap, CHT_WC_PWRSRC_STS, &pwrsrc_sts); in cht_wc_extcon_pwrsrc_event()
219 dev_err(ext->dev, "Error reading pwrsrc status: %d\n", ret); in cht_wc_extcon_pwrsrc_event()
223 id = cht_wc_extcon_get_id(ext, pwrsrc_sts); in cht_wc_extcon_pwrsrc_event()
232 cht_wc_extcon_set_phymux(ext, MUX_SEL_PMIC); in cht_wc_extcon_pwrsrc_event()
236 ret = cht_wc_extcon_get_charger(ext, ignore_get_charger_errors); in cht_wc_extcon_pwrsrc_event()
242 cht_wc_extcon_set_phymux(ext, MUX_SEL_SOC); in cht_wc_extcon_pwrsrc_event()
245 if (cable != ext->previous_cable) { in cht_wc_extcon_pwrsrc_event()
246 cht_wc_extcon_set_state(ext, cable, true); in cht_wc_extcon_pwrsrc_event()
247 cht_wc_extcon_set_state(ext, ext->previous_cable, false); in cht_wc_extcon_pwrsrc_event()
248 ext->previous_cable = cable; in cht_wc_extcon_pwrsrc_event()
251 ext->usb_host = ((id == USB_ID_GND) || (id == USB_RID_A)); in cht_wc_extcon_pwrsrc_event()
252 extcon_set_state_sync(ext->edev, EXTCON_USB_HOST, ext->usb_host); in cht_wc_extcon_pwrsrc_event()
257 struct cht_wc_extcon_data *ext = data; in cht_wc_extcon_isr() local
260 ret = regmap_read(ext->regmap, CHT_WC_PWRSRC_IRQ, &irqs); in cht_wc_extcon_isr()
262 dev_err(ext->dev, "Error reading irqs: %d\n", ret); in cht_wc_extcon_isr()
266 cht_wc_extcon_pwrsrc_event(ext); in cht_wc_extcon_isr()
268 ret = regmap_write(ext->regmap, CHT_WC_PWRSRC_IRQ, irqs); in cht_wc_extcon_isr()
270 dev_err(ext->dev, "Error writing irqs: %d\n", ret); in cht_wc_extcon_isr()
277 static int cht_wc_extcon_sw_control(struct cht_wc_extcon_data *ext, bool enable) in cht_wc_extcon_sw_control() argument
283 ret = regmap_update_bits(ext->regmap, CHT_WC_CHGRCTRL0, mask, val); in cht_wc_extcon_sw_control()
285 dev_err(ext->dev, "Error setting sw control: %d\n", ret); in cht_wc_extcon_sw_control()
293 struct cht_wc_extcon_data *ext; in cht_wc_extcon_probe() local
300 ext = devm_kzalloc(&pdev->dev, sizeof(*ext), GFP_KERNEL); in cht_wc_extcon_probe()
301 if (!ext) in cht_wc_extcon_probe()
304 ext->dev = &pdev->dev; in cht_wc_extcon_probe()
305 ext->regmap = pmic->regmap; in cht_wc_extcon_probe()
306 ext->previous_cable = EXTCON_NONE; in cht_wc_extcon_probe()
309 ext->edev = devm_extcon_dev_allocate(ext->dev, cht_wc_extcon_cables); in cht_wc_extcon_probe()
310 if (IS_ERR(ext->edev)) in cht_wc_extcon_probe()
311 return PTR_ERR(ext->edev); in cht_wc_extcon_probe()
326 cht_wc_extcon_set_5v_boost(ext, false); in cht_wc_extcon_probe()
329 ret = cht_wc_extcon_sw_control(ext, true); in cht_wc_extcon_probe()
334 ret = devm_extcon_dev_register(ext->dev, ext->edev); in cht_wc_extcon_probe()
336 dev_err(ext->dev, "Error registering extcon device: %d\n", ret); in cht_wc_extcon_probe()
341 cht_wc_extcon_set_phymux(ext, MUX_SEL_PMIC); in cht_wc_extcon_probe()
344 cht_wc_extcon_pwrsrc_event(ext); in cht_wc_extcon_probe()
346 ret = devm_request_threaded_irq(ext->dev, irq, NULL, cht_wc_extcon_isr, in cht_wc_extcon_probe()
347 IRQF_ONESHOT, pdev->name, ext); in cht_wc_extcon_probe()
349 dev_err(ext->dev, "Error requesting interrupt: %d\n", ret); in cht_wc_extcon_probe()
354 ret = regmap_write(ext->regmap, CHT_WC_PWRSRC_IRQ_MASK, in cht_wc_extcon_probe()
358 dev_err(ext->dev, "Error writing irq-mask: %d\n", ret); in cht_wc_extcon_probe()
362 platform_set_drvdata(pdev, ext); in cht_wc_extcon_probe()
367 cht_wc_extcon_sw_control(ext, false); in cht_wc_extcon_probe()
373 struct cht_wc_extcon_data *ext = platform_get_drvdata(pdev); in cht_wc_extcon_remove() local
375 cht_wc_extcon_sw_control(ext, false); in cht_wc_extcon_remove()