-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARM i.MX ehci: factor out soc specific functions
Currently we have a mxc_initialize_usb_hw which is called on every i.MX SoC. This function dispatches the different SoC types, which is quite ugly. This patch moves the SoC specific USB initialization to their correspondive mach directories. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
- Loading branch information
Sascha Hauer
committed
Feb 11, 2011
1 parent
f19693a
commit cb07625
Showing
10 changed files
with
502 additions
and
338 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* | ||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de> | ||
* Copyright (C) 2010 Freescale Semiconductor, Inc. | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2 of the License, or (at your | ||
* option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* for more details. | ||
*/ | ||
|
||
#include <linux/platform_device.h> | ||
#include <linux/io.h> | ||
|
||
#include <mach/hardware.h> | ||
#include <mach/mxc_ehci.h> | ||
|
||
#define USBCTRL_OTGBASE_OFFSET 0x600 | ||
|
||
#define MX25_OTG_SIC_SHIFT 29 | ||
#define MX25_OTG_SIC_MASK (0x3 << MX25_OTG_SIC_SHIFT) | ||
#define MX25_OTG_PM_BIT (1 << 24) | ||
|
||
#define MX25_H1_SIC_SHIFT 21 | ||
#define MX25_H1_SIC_MASK (0x3 << MX25_H1_SIC_SHIFT) | ||
#define MX25_H1_PM_BIT (1 << 8) | ||
#define MX25_H1_IPPUE_UP_BIT (1 << 7) | ||
#define MX25_H1_IPPUE_DOWN_BIT (1 << 6) | ||
#define MX25_H1_TLL_BIT (1 << 5) | ||
#define MX25_H1_USBTE_BIT (1 << 4) | ||
|
||
int mx25_initialize_usb_hw(int port, unsigned int flags) | ||
{ | ||
unsigned int v; | ||
|
||
v = readl(MX25_IO_ADDRESS(MX25_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); | ||
|
||
switch (port) { | ||
case 0: /* OTG port */ | ||
v &= ~(MX25_OTG_SIC_MASK | MX25_OTG_PM_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX25_OTG_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX25_OTG_PM_BIT; | ||
|
||
break; | ||
case 1: /* H1 port */ | ||
v &= ~(MX25_H1_SIC_MASK | MX25_H1_PM_BIT | MX25_H1_TLL_BIT | | ||
MX25_H1_USBTE_BIT | MX25_H1_IPPUE_DOWN_BIT | MX25_H1_IPPUE_UP_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX25_H1_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX25_H1_PM_BIT; | ||
|
||
if (!(flags & MXC_EHCI_TTL_ENABLED)) | ||
v |= MX25_H1_TLL_BIT; | ||
|
||
if (flags & MXC_EHCI_INTERNAL_PHY) | ||
v |= MX25_H1_USBTE_BIT; | ||
|
||
if (flags & MXC_EHCI_IPPUE_DOWN) | ||
v |= MX25_H1_IPPUE_DOWN_BIT; | ||
|
||
if (flags & MXC_EHCI_IPPUE_UP) | ||
v |= MX25_H1_IPPUE_UP_BIT; | ||
|
||
break; | ||
default: | ||
return -EINVAL; | ||
} | ||
|
||
writel(v, MX25_IO_ADDRESS(MX25_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); | ||
|
||
return 0; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
/* | ||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de> | ||
* Copyright (C) 2010 Freescale Semiconductor, Inc. | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2 of the License, or (at your | ||
* option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* for more details. | ||
*/ | ||
|
||
#include <linux/platform_device.h> | ||
#include <linux/io.h> | ||
|
||
#include <mach/hardware.h> | ||
#include <mach/mxc_ehci.h> | ||
|
||
#define USBCTRL_OTGBASE_OFFSET 0x600 | ||
|
||
#define MX27_OTG_SIC_SHIFT 29 | ||
#define MX27_OTG_SIC_MASK (0x3 << MX27_OTG_SIC_SHIFT) | ||
#define MX27_OTG_PM_BIT (1 << 24) | ||
|
||
#define MX27_H2_SIC_SHIFT 21 | ||
#define MX27_H2_SIC_MASK (0x3 << MX27_H2_SIC_SHIFT) | ||
#define MX27_H2_PM_BIT (1 << 16) | ||
#define MX27_H2_DT_BIT (1 << 5) | ||
|
||
#define MX27_H1_SIC_SHIFT 13 | ||
#define MX27_H1_SIC_MASK (0x3 << MX27_H1_SIC_SHIFT) | ||
#define MX27_H1_PM_BIT (1 << 8) | ||
#define MX27_H1_DT_BIT (1 << 4) | ||
|
||
int mx27_initialize_usb_hw(int port, unsigned int flags) | ||
{ | ||
unsigned int v; | ||
|
||
v = readl(MX27_IO_ADDRESS(MX27_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); | ||
|
||
switch (port) { | ||
case 0: /* OTG port */ | ||
v &= ~(MX27_OTG_SIC_MASK | MX27_OTG_PM_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX27_OTG_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX27_OTG_PM_BIT; | ||
break; | ||
case 1: /* H1 port */ | ||
v &= ~(MX27_H1_SIC_MASK | MX27_H1_PM_BIT | MX27_H1_DT_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX27_H1_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX27_H1_PM_BIT; | ||
|
||
if (!(flags & MXC_EHCI_TTL_ENABLED)) | ||
v |= MX27_H1_DT_BIT; | ||
|
||
break; | ||
case 2: /* H2 port */ | ||
v &= ~(MX27_H2_SIC_MASK | MX27_H2_PM_BIT | MX27_H2_DT_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX27_H2_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX27_H2_PM_BIT; | ||
|
||
if (!(flags & MXC_EHCI_TTL_ENABLED)) | ||
v |= MX27_H2_DT_BIT; | ||
|
||
break; | ||
default: | ||
return -EINVAL; | ||
} | ||
|
||
writel(v, MX27_IO_ADDRESS(MX27_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); | ||
|
||
return 0; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
/* | ||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de> | ||
* Copyright (C) 2010 Freescale Semiconductor, Inc. | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2 of the License, or (at your | ||
* option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* for more details. | ||
*/ | ||
|
||
#include <linux/platform_device.h> | ||
#include <linux/io.h> | ||
|
||
#include <mach/hardware.h> | ||
#include <mach/mxc_ehci.h> | ||
|
||
#define USBCTRL_OTGBASE_OFFSET 0x600 | ||
|
||
#define MX31_OTG_SIC_SHIFT 29 | ||
#define MX31_OTG_SIC_MASK (0x3 << MX31_OTG_SIC_SHIFT) | ||
#define MX31_OTG_PM_BIT (1 << 24) | ||
|
||
#define MX31_H2_SIC_SHIFT 21 | ||
#define MX31_H2_SIC_MASK (0x3 << MX31_H2_SIC_SHIFT) | ||
#define MX31_H2_PM_BIT (1 << 16) | ||
#define MX31_H2_DT_BIT (1 << 5) | ||
|
||
#define MX31_H1_SIC_SHIFT 13 | ||
#define MX31_H1_SIC_MASK (0x3 << MX31_H1_SIC_SHIFT) | ||
#define MX31_H1_PM_BIT (1 << 8) | ||
#define MX31_H1_DT_BIT (1 << 4) | ||
|
||
int mx31_initialize_usb_hw(int port, unsigned int flags) | ||
{ | ||
unsigned int v; | ||
|
||
v = readl(MX31_IO_ADDRESS(MX31_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); | ||
|
||
switch (port) { | ||
case 0: /* OTG port */ | ||
v &= ~(MX31_OTG_SIC_MASK | MX31_OTG_PM_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX31_OTG_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX31_OTG_PM_BIT; | ||
|
||
break; | ||
case 1: /* H1 port */ | ||
v &= ~(MX31_H1_SIC_MASK | MX31_H1_PM_BIT | MX31_H1_DT_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX31_H1_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX31_H1_PM_BIT; | ||
|
||
if (!(flags & MXC_EHCI_TTL_ENABLED)) | ||
v |= MX31_H1_DT_BIT; | ||
|
||
break; | ||
case 2: /* H2 port */ | ||
v &= ~(MX31_H2_SIC_MASK | MX31_H2_PM_BIT | MX31_H2_DT_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX31_H2_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX31_H2_PM_BIT; | ||
|
||
if (!(flags & MXC_EHCI_TTL_ENABLED)) | ||
v |= MX31_H2_DT_BIT; | ||
|
||
break; | ||
default: | ||
return -EINVAL; | ||
} | ||
|
||
writel(v, MX31_IO_ADDRESS(MX31_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); | ||
|
||
return 0; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* | ||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de> | ||
* Copyright (C) 2010 Freescale Semiconductor, Inc. | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2 of the License, or (at your | ||
* option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* for more details. | ||
*/ | ||
|
||
#include <linux/platform_device.h> | ||
#include <linux/io.h> | ||
|
||
#include <mach/hardware.h> | ||
#include <mach/mxc_ehci.h> | ||
|
||
#define USBCTRL_OTGBASE_OFFSET 0x600 | ||
|
||
#define MX35_OTG_SIC_SHIFT 29 | ||
#define MX35_OTG_SIC_MASK (0x3 << MX35_OTG_SIC_SHIFT) | ||
#define MX35_OTG_PM_BIT (1 << 24) | ||
|
||
#define MX35_H1_SIC_SHIFT 21 | ||
#define MX35_H1_SIC_MASK (0x3 << MX35_H1_SIC_SHIFT) | ||
#define MX35_H1_PM_BIT (1 << 8) | ||
#define MX35_H1_IPPUE_UP_BIT (1 << 7) | ||
#define MX35_H1_IPPUE_DOWN_BIT (1 << 6) | ||
#define MX35_H1_TLL_BIT (1 << 5) | ||
#define MX35_H1_USBTE_BIT (1 << 4) | ||
|
||
int mx35_initialize_usb_hw(int port, unsigned int flags) | ||
{ | ||
unsigned int v; | ||
|
||
v = readl(MX35_IO_ADDRESS(MX35_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); | ||
|
||
switch (port) { | ||
case 0: /* OTG port */ | ||
v &= ~(MX35_OTG_SIC_MASK | MX35_OTG_PM_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX35_OTG_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX35_OTG_PM_BIT; | ||
|
||
break; | ||
case 1: /* H1 port */ | ||
v &= ~(MX35_H1_SIC_MASK | MX35_H1_PM_BIT | MX35_H1_TLL_BIT | | ||
MX35_H1_USBTE_BIT | MX35_H1_IPPUE_DOWN_BIT | MX35_H1_IPPUE_UP_BIT); | ||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX35_H1_SIC_SHIFT; | ||
|
||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) | ||
v |= MX35_H1_PM_BIT; | ||
|
||
if (!(flags & MXC_EHCI_TTL_ENABLED)) | ||
v |= MX35_H1_TLL_BIT; | ||
|
||
if (flags & MXC_EHCI_INTERNAL_PHY) | ||
v |= MX35_H1_USBTE_BIT; | ||
|
||
if (flags & MXC_EHCI_IPPUE_DOWN) | ||
v |= MX35_H1_IPPUE_DOWN_BIT; | ||
|
||
if (flags & MXC_EHCI_IPPUE_UP) | ||
v |= MX35_H1_IPPUE_UP_BIT; | ||
|
||
break; | ||
default: | ||
return -EINVAL; | ||
} | ||
|
||
writel(v, MX35_IO_ADDRESS(MX35_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); | ||
|
||
return 0; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.