• Home
  • Raw
  • Download

Lines Matching +full:usb +full:- +full:sdp

6  * Copyright (C) 2013-2015 Intel Corporation. All rights reserved.
18 #include <linux/extcon-provider.h>
128 ret = regmap_read(ext->regmap, CHT_WC_USBSRC, &usbsrc); in cht_wc_extcon_get_charger()
130 dev_err(ext->dev, "Error reading usbsrc: %d\n", ret); in cht_wc_extcon_get_charger()
147 dev_warn(ext->dev, "Could not detect charger type\n"); in cht_wc_extcon_get_charger()
149 dev_warn(ext->dev, "Timeout detecting charger type\n"); in cht_wc_extcon_get_charger()
156 dev_warn(ext->dev, in cht_wc_extcon_get_charger()
157 "Unhandled charger type %d, defaulting to SDP\n", in cht_wc_extcon_get_charger()
179 ret = regmap_write(ext->regmap, CHT_WC_PHYCTRL, state); in cht_wc_extcon_set_phymux()
181 dev_err(ext->dev, "Error writing phyctrl: %d\n", ret); in cht_wc_extcon_set_phymux()
197 ret = regmap_write(ext->regmap, CHT_WC_VBUS_GPIO_CTLO, val); in cht_wc_extcon_set_5v_boost()
199 dev_err(ext->dev, "Error writing Vbus GPIO CTLO: %d\n", ret); in cht_wc_extcon_set_5v_boost()
206 extcon_set_state_sync(ext->edev, cable, state); in cht_wc_extcon_set_state()
208 extcon_set_state_sync(ext->edev, EXTCON_USB, state); in cht_wc_extcon_set_state()
216 bool ignore_get_charger_errors = ext->usb_host; in cht_wc_extcon_pwrsrc_event()
218 ret = regmap_read(ext->regmap, CHT_WC_PWRSRC_STS, &pwrsrc_sts); in cht_wc_extcon_pwrsrc_event()
220 dev_err(ext->dev, "Error reading pwrsrc status: %d\n", ret); in cht_wc_extcon_pwrsrc_event()
226 /* The 5v boost causes a false VBUS / SDP detect, skip */ in cht_wc_extcon_pwrsrc_event()
232 /* Route D+ and D- to PMIC for future charger detection */ in cht_wc_extcon_pwrsrc_event()
242 /* Route D+ and D- to SoC for the host or gadget controller */ in cht_wc_extcon_pwrsrc_event()
246 if (cable != ext->previous_cable) { in cht_wc_extcon_pwrsrc_event()
248 cht_wc_extcon_set_state(ext, ext->previous_cable, false); in cht_wc_extcon_pwrsrc_event()
249 ext->previous_cable = cable; in cht_wc_extcon_pwrsrc_event()
252 ext->usb_host = ((id == USB_ID_GND) || (id == USB_RID_A)); in cht_wc_extcon_pwrsrc_event()
253 extcon_set_state_sync(ext->edev, EXTCON_USB_HOST, ext->usb_host); in cht_wc_extcon_pwrsrc_event()
261 ret = regmap_read(ext->regmap, CHT_WC_PWRSRC_IRQ, &irqs); in cht_wc_extcon_isr()
263 dev_err(ext->dev, "Error reading irqs: %d\n", ret); in cht_wc_extcon_isr()
269 ret = regmap_write(ext->regmap, CHT_WC_PWRSRC_IRQ, irqs); in cht_wc_extcon_isr()
271 dev_err(ext->dev, "Error writing irqs: %d\n", ret); in cht_wc_extcon_isr()
284 ret = regmap_update_bits(ext->regmap, CHT_WC_CHGRCTRL0, mask, val); in cht_wc_extcon_sw_control()
286 dev_err(ext->dev, "Error setting sw control: %d\n", ret); in cht_wc_extcon_sw_control()
293 struct intel_soc_pmic *pmic = dev_get_drvdata(pdev->dev.parent); in cht_wc_extcon_probe()
301 ext = devm_kzalloc(&pdev->dev, sizeof(*ext), GFP_KERNEL); in cht_wc_extcon_probe()
303 return -ENOMEM; in cht_wc_extcon_probe()
305 ext->dev = &pdev->dev; in cht_wc_extcon_probe()
306 ext->regmap = pmic->regmap; in cht_wc_extcon_probe()
307 ext->previous_cable = EXTCON_NONE; in cht_wc_extcon_probe()
310 ext->edev = devm_extcon_dev_allocate(ext->dev, cht_wc_extcon_cables); in cht_wc_extcon_probe()
311 if (IS_ERR(ext->edev)) in cht_wc_extcon_probe()
312 return PTR_ERR(ext->edev); in cht_wc_extcon_probe()
315 * When a host-cable is detected the BIOS enables an external 5v boost in cht_wc_extcon_probe()
320 * (and unless we drive the external-charger-disable pin high it in cht_wc_extcon_probe()
322 * 2) This gets seen by the pwrsrc block as a SDP USB Vbus supply in cht_wc_extcon_probe()
335 ret = devm_extcon_dev_register(ext->dev, ext->edev); in cht_wc_extcon_probe()
337 dev_err(ext->dev, "Error registering extcon device: %d\n", ret); in cht_wc_extcon_probe()
341 /* Route D+ and D- to PMIC for initial charger detection */ in cht_wc_extcon_probe()
347 ret = devm_request_threaded_irq(ext->dev, irq, NULL, cht_wc_extcon_isr, in cht_wc_extcon_probe()
348 IRQF_ONESHOT, pdev->name, ext); in cht_wc_extcon_probe()
350 dev_err(ext->dev, "Error requesting interrupt: %d\n", ret); in cht_wc_extcon_probe()
355 ret = regmap_write(ext->regmap, CHT_WC_PWRSRC_IRQ_MASK, in cht_wc_extcon_probe()
359 dev_err(ext->dev, "Error writing irq-mask: %d\n", ret); in cht_wc_extcon_probe()