Lines Matching +full:pmic +full:- +full:id
1 // SPDX-License-Identifier: GPL-2.0
3 * extcon driver for Basin Cove PMIC
9 #include <linux/extcon-provider.h>
18 #include "extcon-intel.h"
54 unsigned int id; member
70 return regmap_update_bits(data->regmap, reg, mask, 0x00); in mrfld_extcon_clear()
76 return regmap_update_bits(data->regmap, reg, mask, 0xff); in mrfld_extcon_set()
82 struct device *dev = data->dev; in mrfld_extcon_sw_control()
96 struct regmap *regmap = data->regmap; in mrfld_extcon_get_id()
97 unsigned int id; in mrfld_extcon_get_id() local
101 ret = regmap_read(regmap, BCOVE_USBIDSTS, &id); in mrfld_extcon_get_id()
105 if (id & BCOVE_USBIDSTS_FLOAT) in mrfld_extcon_get_id()
108 switch ((id & BCOVE_USBIDSTS_RARBRC_MASK) >> BCOVE_USBIDSTS_RARBRC_SHIFT) { in mrfld_extcon_get_id()
118 * PMIC A0 reports USBIDSTS_GND = 1 for ID_GND, in mrfld_extcon_get_id()
119 * but PMIC B0 reports USBIDSTS_GND = 0 for ID_GND. in mrfld_extcon_get_id()
122 ground = id & BCOVE_USBIDSTS_GND; in mrfld_extcon_get_id()
123 switch ('A' + BCOVE_MAJOR(data->id)) { in mrfld_extcon_get_id()
136 unsigned int id; in mrfld_extcon_role_detect() local
144 id = ret; in mrfld_extcon_role_detect()
146 usb_host = (id == INTEL_USB_ID_GND) || (id == INTEL_USB_RID_A); in mrfld_extcon_role_detect()
147 extcon_set_state_sync(data->edev, EXTCON_USB_HOST, usb_host); in mrfld_extcon_role_detect()
154 struct regmap *regmap = data->regmap; in mrfld_extcon_cable_detect()
167 change = status ^ data->status; in mrfld_extcon_cable_detect()
169 return -ENODATA; in mrfld_extcon_cable_detect()
177 data->status = status; in mrfld_extcon_cable_detect()
196 struct device *dev = &pdev->dev; in mrfld_extcon_probe()
197 struct intel_soc_pmic *pmic = dev_get_drvdata(dev->parent); in mrfld_extcon_probe() local
198 struct regmap *regmap = pmic->regmap; in mrfld_extcon_probe()
201 unsigned int id; in mrfld_extcon_probe() local
210 return -ENOMEM; in mrfld_extcon_probe()
212 data->dev = dev; in mrfld_extcon_probe()
213 data->regmap = regmap; in mrfld_extcon_probe()
215 data->edev = devm_extcon_dev_allocate(dev, mrfld_extcon_cable); in mrfld_extcon_probe()
216 if (IS_ERR(data->edev)) in mrfld_extcon_probe()
217 return PTR_ERR(data->edev); in mrfld_extcon_probe()
219 ret = devm_extcon_dev_register(dev, data->edev); in mrfld_extcon_probe()
224 IRQF_ONESHOT | IRQF_SHARED, pdev->name, in mrfld_extcon_probe()
229 ret = regmap_read(regmap, BCOVE_ID, &id); in mrfld_extcon_probe()
231 return dev_err_probe(dev, ret, "can't read PMIC ID\n"); in mrfld_extcon_probe()
233 data->id = id; in mrfld_extcon_probe()
248 data->status = status; in mrfld_extcon_probe()
284 MODULE_DESCRIPTION("extcon driver for Intel Merrifield Basin Cove PMIC");