Lines Matching refs:twl

18 #include <linux/mfd/twl.h>
104 static inline int twl6030_writeb(struct twl6030_usb *twl, u8 module,
111 dev_err(twl->dev,
116 static inline u8 twl6030_readb(struct twl6030_usb *twl, u8 module, u8 address)
125 dev_err(twl->dev,
133 struct twl6030_usb *twl = comparator_to_twl(comparator);
135 twl6030_writeb(twl, TWL_MODULE_USB, 0x24, USB_VBUS_CTRL_SET);
136 twl6030_writeb(twl, TWL_MODULE_USB, 0x84, USB_VBUS_CTRL_SET);
139 twl6030_writeb(twl, TWL_MODULE_USB, 0xa0, USB_VBUS_CTRL_CLR);
144 static int twl6030_usb_ldo_init(struct twl6030_usb *twl)
147 twl6030_writeb(twl, TWL6030_MODULE_ID0, 0x1, TWL6030_BACKUP_REG);
150 twl6030_writeb(twl, TWL6030_MODULE_ID0, 0x1, TWL6030_CFG_LDO_PD2);
153 twl6030_writeb(twl, TWL6030_MODULE_ID0, 0x10, TWL6030_MISC2);
155 twl->usb3v3 = regulator_get(twl->dev, "usb");
156 if (IS_ERR(twl->usb3v3))
160 twl6030_writeb(twl, TWL_MODULE_USB, 0x4, USB_VBUS_CTRL_SET);
166 twl6030_writeb(twl, TWL_MODULE_USB, 0x14, USB_ID_CTRL_SET);
174 struct twl6030_usb *twl = dev_get_drvdata(dev);
178 spin_lock_irqsave(&twl->lock, flags);
180 switch (twl->linkstat) {
193 spin_unlock_irqrestore(&twl->lock, flags);
207 struct twl6030_usb *twl = _twl;
212 hw_state = twl6030_readb(twl, TWL6030_MODULE_ID0, STS_HW_CONDITIONS);
214 vbus_state = twl6030_readb(twl, TWL_MODULE_MAIN_CHARGE,
218 ret = regulator_enable(twl->usb3v3);
220 dev_err(twl->dev, "Failed to enable usb3v3\n");
222 twl->asleep = 1;
224 twl->linkstat = status;
227 twl->linkstat = MUSB_UNKNOWN;
229 if (twl->linkstat != MUSB_UNKNOWN) {
231 twl->linkstat = status;
234 twl->linkstat = MUSB_UNKNOWN;
235 if (twl->asleep) {
236 regulator_disable(twl->usb3v3);
237 twl->asleep = 0;
242 sysfs_notify(&twl->dev->kobj, NULL, "vbus");
249 struct twl6030_usb *twl = _twl;
254 hw_state = twl6030_readb(twl, TWL6030_MODULE_ID0, STS_HW_CONDITIONS);
257 ret = regulator_enable(twl->usb3v3);
259 dev_err(twl->dev, "Failed to enable usb3v3\n");
261 twl->asleep = 1;
262 twl6030_writeb(twl, TWL_MODULE_USB, 0x1, USB_ID_INT_EN_HI_CLR);
263 twl6030_writeb(twl, TWL_MODULE_USB, 0x10, USB_ID_INT_EN_HI_SET);
265 twl->linkstat = status;
268 twl->linkstat = MUSB_UNKNOWN;
270 twl6030_writeb(twl, TWL_MODULE_USB, 0x10, USB_ID_INT_EN_HI_CLR);
271 twl6030_writeb(twl, TWL_MODULE_USB, 0x1, USB_ID_INT_EN_HI_SET);
273 twl6030_writeb(twl, TWL_MODULE_USB, status, USB_ID_INT_LATCH_CLR);
280 struct twl6030_usb *twl = container_of(work, struct twl6030_usb,
283 twl6030_usb_irq(twl->irq2, twl);
284 twl6030_usbotg_irq(twl->irq1, twl);
287 static int twl6030_enable_irq(struct twl6030_usb *twl)
289 twl6030_writeb(twl, TWL_MODULE_USB, 0x1, USB_ID_INT_EN_HI_SET);
303 struct twl6030_usb *twl = container_of(data, struct twl6030_usb,
311 if (twl->vbus_enable)
312 twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE, 0x40,
315 twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE, 0x00,
321 struct twl6030_usb *twl = comparator_to_twl(comparator);
323 twl->vbus_enable = enabled;
324 schedule_work(&twl->set_vbus_work);
332 struct twl6030_usb *twl;
342 twl = devm_kzalloc(dev, sizeof(*twl), GFP_KERNEL);
343 if (!twl)
346 twl->dev = &pdev->dev;
347 twl->irq1 = platform_get_irq(pdev, 0);
348 twl->irq2 = platform_get_irq(pdev, 1);
349 twl->linkstat = MUSB_UNKNOWN;
351 if (twl->irq1 < 0)
352 return twl->irq1;
353 if (twl->irq2 < 0)
354 return twl->irq2;
356 twl->comparator.set_vbus = twl6030_set_vbus;
357 twl->comparator.start_srp = twl6030_start_srp;
359 ret = omap_usb2_set_comparator(&twl->comparator);
366 spin_lock_init(&twl->lock);
368 err = twl6030_usb_ldo_init(twl);
374 platform_set_drvdata(pdev, twl);
376 INIT_WORK(&twl->set_vbus_work, otg_set_vbus_work);
377 INIT_DELAYED_WORK(&twl->get_status_work, twl6030_status_work);
379 status = request_threaded_irq(twl->irq1, NULL, twl6030_usbotg_irq,
381 "twl6030_usb", twl);
384 twl->irq1, status);
388 status = request_threaded_irq(twl->irq2, NULL, twl6030_usb_irq,
390 "twl6030_usb", twl);
393 twl->irq2, status);
397 twl->asleep = 0;
398 twl6030_enable_irq(twl);
399 schedule_delayed_work(&twl->get_status_work, HZ);
405 free_irq(twl->irq1, twl);
407 regulator_put(twl->usb3v3);
414 struct twl6030_usb *twl = platform_get_drvdata(pdev);
416 cancel_delayed_work_sync(&twl->get_status_work);
421 free_irq(twl->irq1, twl);
422 free_irq(twl->irq2, twl);
423 regulator_put(twl->usb3v3);
424 cancel_work_sync(&twl->set_vbus_work);