19 #include <linux/kernel.h>
20 #include <linux/module.h>
21 #include <linux/types.h>
22 #include <linux/slab.h>
31 #define USBTLL_DRIVER_NAME "usbhs_tll"
34 #define OMAP_USBTLL_REVISION (0x00)
35 #define OMAP_USBTLL_SYSCONFIG (0x10)
36 #define OMAP_USBTLL_SYSCONFIG_CACTIVITY (1 << 8)
37 #define OMAP_USBTLL_SYSCONFIG_SIDLEMODE (1 << 3)
38 #define OMAP_USBTLL_SYSCONFIG_ENAWAKEUP (1 << 2)
39 #define OMAP_USBTLL_SYSCONFIG_SOFTRESET (1 << 1)
40 #define OMAP_USBTLL_SYSCONFIG_AUTOIDLE (1 << 0)
42 #define OMAP_USBTLL_SYSSTATUS (0x14)
43 #define OMAP_USBTLL_SYSSTATUS_RESETDONE (1 << 0)
45 #define OMAP_USBTLL_IRQSTATUS (0x18)
46 #define OMAP_USBTLL_IRQENABLE (0x1C)
48 #define OMAP_TLL_SHARED_CONF (0x30)
49 #define OMAP_TLL_SHARED_CONF_USB_90D_DDR_EN (1 << 6)
50 #define OMAP_TLL_SHARED_CONF_USB_180D_SDR_EN (1 << 5)
51 #define OMAP_TLL_SHARED_CONF_USB_DIVRATION (1 << 2)
52 #define OMAP_TLL_SHARED_CONF_FCLK_REQ (1 << 1)
53 #define OMAP_TLL_SHARED_CONF_FCLK_IS_ON (1 << 0)
55 #define OMAP_TLL_CHANNEL_CONF(num) (0x040 + 0x004 * num)
56 #define OMAP_TLL_CHANNEL_CONF_FSLSMODE_SHIFT 24
57 #define OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF (1 << 11)
58 #define OMAP_TLL_CHANNEL_CONF_ULPI_ULPIAUTOIDLE (1 << 10)
59 #define OMAP_TLL_CHANNEL_CONF_UTMIAUTOIDLE (1 << 9)
60 #define OMAP_TLL_CHANNEL_CONF_ULPIDDRMODE (1 << 8)
61 #define OMAP_TLL_CHANNEL_CONF_CHANMODE_FSLS (1 << 1)
62 #define OMAP_TLL_CHANNEL_CONF_CHANEN (1 << 0)
64 #define OMAP_TLL_FSLSMODE_6PIN_PHY_DAT_SE0 0x0
65 #define OMAP_TLL_FSLSMODE_6PIN_PHY_DP_DM 0x1
66 #define OMAP_TLL_FSLSMODE_3PIN_PHY 0x2
67 #define OMAP_TLL_FSLSMODE_4PIN_PHY 0x3
68 #define OMAP_TLL_FSLSMODE_6PIN_TLL_DAT_SE0 0x4
69 #define OMAP_TLL_FSLSMODE_6PIN_TLL_DP_DM 0x5
70 #define OMAP_TLL_FSLSMODE_3PIN_TLL 0x6
71 #define OMAP_TLL_FSLSMODE_4PIN_TLL 0x7
72 #define OMAP_TLL_FSLSMODE_2PIN_TLL_DAT_SE0 0xA
73 #define OMAP_TLL_FSLSMODE_2PIN_DAT_DP_DM 0xB
75 #define OMAP_TLL_ULPI_FUNCTION_CTRL(num) (0x804 + 0x100 * num)
76 #define OMAP_TLL_ULPI_INTERFACE_CTRL(num) (0x807 + 0x100 * num)
77 #define OMAP_TLL_ULPI_OTG_CTRL(num) (0x80A + 0x100 * num)
78 #define OMAP_TLL_ULPI_INT_EN_RISE(num) (0x80D + 0x100 * num)
79 #define OMAP_TLL_ULPI_INT_EN_FALL(num) (0x810 + 0x100 * num)
80 #define OMAP_TLL_ULPI_INT_STATUS(num) (0x813 + 0x100 * num)
81 #define OMAP_TLL_ULPI_INT_LATCH(num) (0x814 + 0x100 * num)
82 #define OMAP_TLL_ULPI_DEBUG(num) (0x815 + 0x100 * num)
83 #define OMAP_TLL_ULPI_SCRATCH_REGISTER(num) (0x816 + 0x100 * num)
85 #define OMAP_REV2_TLL_CHANNEL_COUNT 2
86 #define OMAP_TLL_CHANNEL_COUNT 3
87 #define OMAP_TLL_CHANNEL_1_EN_MASK (1 << 0)
88 #define OMAP_TLL_CHANNEL_2_EN_MASK (1 << 1)
89 #define OMAP_TLL_CHANNEL_3_EN_MASK (1 << 2)
92 #define OMAP_USBTLL_REV1 0x00000015
93 #define OMAP_USBTLL_REV2 0x00000018
94 #define OMAP_USBTLL_REV3 0x00000004
96 #define is_ehci_tll_mode(x) (x == OMAP_EHCI_PORT_MODE_TLL)
193 pr_warn(
"Invalid port mode, using default\n");
215 dev_dbg(dev,
"starting TI HSUSB TLL Controller\n");
219 dev_err(dev,
"Memory allocation failed\n");
227 tll->
platdata.port_mode[i] = pdata->port_mode[i];
232 dev_err(dev,
"usbtll_p1_fck failed error:%d\n", ret);
239 dev_err(dev,
"usbtll_p2_fck failed error:%d\n", ret);
240 goto err_usbtll_p1_fck;
245 dev_err(dev,
"usb tll get resource failed\n");
247 goto err_usbtll_p2_fck;
252 dev_err(dev,
"TLL ioremap failed\n");
254 goto err_usbtll_p2_fck;
257 platform_set_drvdata(pdev, tll);
259 pm_runtime_get_sync(dev);
273 dev_err(dev,
"TLL version failed\n");
281 is_ohci_port(pdata->port_mode[0]) ||
282 is_ohci_port(pdata->port_mode[1]) ||
283 is_ohci_port(pdata->port_mode[2])) {
295 for (i = 0; i <
count; i++) {
298 if (is_ohci_port(pdata->port_mode[i])) {
299 reg |= ohci_omap3_fslsmode(pdata->port_mode[i])
302 }
else if (pdata->port_mode[i] ==
324 spin_unlock_irqrestore(&tll->
lock, flags);
326 pm_runtime_put_sync(dev);
330 pm_runtime_disable(dev);
353 struct usbtll_omap *tll = platform_get_drvdata(pdev);
357 pm_runtime_disable(&pdev->
dev);
362 static int usbtll_runtime_resume(
struct device *dev)
365 struct usbtll_omap_platform_data *pdata = &tll->
platdata;
368 dev_dbg(dev,
"usbtll_runtime_resume\n");
371 dev_dbg(dev,
"missing platform_data\n");
383 spin_unlock_irqrestore(&tll->
lock, flags);
388 static int usbtll_runtime_suspend(
struct device *dev)
391 struct usbtll_omap_platform_data *pdata = &tll->
platdata;
394 dev_dbg(dev,
"usbtll_runtime_suspend\n");
397 dev_dbg(dev,
"missing platform_data\n");
409 spin_unlock_irqrestore(&tll->
lock, flags);
414 static const struct dev_pm_ops usbtllomap_dev_pm_ops = {
416 usbtll_runtime_resume,
424 .
pm = &usbtllomap_dev_pm_ops,
426 .
probe = usbtll_omap_probe,
433 pr_err(
"missing omap usbhs tll platform_data\n");
436 return pm_runtime_get_sync(&tll_pdev->
dev);
443 pr_err(
"missing omap usbhs tll platform_data\n");
446 return pm_runtime_put_sync(&tll_pdev->
dev);
455 static int __init omap_usbtll_drvinit(
void)
467 static void __exit omap_usbtll_drvexit(
void)