ARM: Nec MobilePro900/c: isp116x: USB host device hardware reset and defconfig update
ARM: Nec MobilePro900/c: isp116x: USB host device hardware reset and defconfig update
On MobilePro900 we have ability to hard reset usb chip through gpio65.
Also updating USB host related GPIO in platform configuration.
Signed-off-by: Yulay Rakhmangulov <yulayr@gmail.com>
Signed-off-by: Kristoffer <kristoffer@Boggieman.(none)>
diff --git a/arch/arm/configs/mp900_defconfig b/arch/arm/configs/mp900_defconfig
index aacaa2a..2ad4baa 100644
--- a/arch/arm/configs/mp900_defconfig
+++ b/arch/arm/configs/mp900_defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.34
-# Sun Sep 19 17:37:17 2010
+# Sun Jan 2 16:02:05 2011
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -1213,14 +1213,14 @@
# CONFIG_SOUND_PRIME is not set
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
-CONFIG_HIDRAW=y
+# CONFIG_HIDRAW is not set
#
# USB Input Devices
#
CONFIG_USB_HID=y
# CONFIG_HID_PID is not set
-CONFIG_USB_HIDDEV=y
+# CONFIG_USB_HIDDEV is not set
#
# Special HID drivers
@@ -1247,7 +1247,7 @@
CONFIG_HID_MICROSOFT=y
# CONFIG_HID_MOSART is not set
CONFIG_HID_MONTEREY=y
-CONFIG_HID_NTRIG=y
+# CONFIG_HID_NTRIG is not set
CONFIG_HID_ORTEK=y
CONFIG_HID_PANTHERLORD=y
# CONFIG_PANTHERLORD_FF is not set
@@ -1264,7 +1264,7 @@
CONFIG_HID_TOPSEED=y
CONFIG_HID_THRUSTMASTER=y
# CONFIG_THRUSTMASTER_FF is not set
-CONFIG_HID_WACOM=m
+# CONFIG_HID_WACOM is not set
CONFIG_HID_ZEROPLUS=y
# CONFIG_ZEROPLUS_FF is not set
CONFIG_USB_SUPPORT=y
@@ -1278,7 +1278,7 @@
#
# Miscellaneous USB options
#
-CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICEFS is not set
# CONFIG_USB_DEVICE_CLASS is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
CONFIG_USB_MON=m
@@ -1301,9 +1301,9 @@
#
# USB Device Class drivers
#
-CONFIG_USB_ACM=m
+# CONFIG_USB_ACM is not set
CONFIG_USB_PRINTER=m
-CONFIG_USB_WDM=y
+# CONFIG_USB_WDM is not set
# CONFIG_USB_TMC is not set
#
@@ -1314,25 +1314,25 @@
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=m
-CONFIG_USB_STORAGE_FREECOM=m
-CONFIG_USB_STORAGE_ISD200=m
-CONFIG_USB_STORAGE_USBAT=m
-CONFIG_USB_STORAGE_SDDR09=m
-CONFIG_USB_STORAGE_SDDR55=m
-CONFIG_USB_STORAGE_JUMPSHOT=m
-CONFIG_USB_STORAGE_ALAUDA=m
+CONFIG_USB_STORAGE_DEBUG=y
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
# CONFIG_USB_STORAGE_ONETOUCH is not set
-CONFIG_USB_STORAGE_KARMA=m
+# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
# CONFIG_USB_LIBUSUAL is not set
#
# USB Imaging devices
#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
#
# USB port drivers
@@ -1343,7 +1343,7 @@
# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_ARK3116 is not set
# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_CH341 is not set
+CONFIG_USB_SERIAL_CH341=m
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_CP210X is not set
@@ -1367,7 +1367,7 @@
# CONFIG_USB_SERIAL_MOS7720 is not set
# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_MOTOROLA is not set
-CONFIG_USB_SERIAL_NAVMAN=m
+# CONFIG_USB_SERIAL_NAVMAN is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_OTI6858 is not set
# CONFIG_USB_SERIAL_QCAUX is not set
@@ -1395,16 +1395,16 @@
# CONFIG_USB_ADUTUX is not set
# CONFIG_USB_SEVSEG is not set
# CONFIG_USB_RIO500 is not set
-CONFIG_USB_LEGOTOWER=m
+# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
-CONFIG_USB_LED=m
+# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
-CONFIG_USB_TRANCEVIBRATOR=m
+# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not set
@@ -1678,7 +1678,7 @@
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024
@@ -1719,7 +1719,6 @@
CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
diff --git a/arch/arm/mach-pxa/mp900.c b/arch/arm/mach-pxa/mp900.c
index cfda24e..71c7968 100644
--- a/arch/arm/mach-pxa/mp900.c
+++ b/arch/arm/mach-pxa/mp900.c
@@ -195,16 +195,23 @@
GPIO1_RST, /* RESET pin */
- GPIO2_GPIO | MFP_LPM_CAN_WAKEUP | MFP_LPM_EDGE_RISE, //? IRQ_GPIO(2)
- GPIO3_GPIO | MFP_LPM_CAN_WAKEUP | MFP_LPM_EDGE_FALL, //? IRQ_GPIO(3)
-
- GPIO4_GPIO | MFP_LPM_EDGE_BOTH, //? IRQ_GPIO(4)
+ GPIO4_GPIO | MFP_LPM_EDGE_BOTH, //? IRQ_GPIO(4)
GPIO6_GPIO | MFP_LPM_CAN_WAKEUP | MFP_LPM_EDGE_FALL, //? IRQ_GPIO(6)
MFP_CFG_OUT(GPIO12, AF0, DRIVE_HIGH), //? output
- GPIO63_GPIO | MFP_LPM_EDGE_FALL, //? IRQ_GPIO(63)
+ /* USB chip Phillips isp116x */
+ MFP_CFG_OUT(GPIO65, AF0, DRIVE_HIGH), /* nRESET */
+ /* USB Device Controller */
+ GPIO3_GPIO | MFP_LPM_CAN_WAKEUP, /* MFP_LPM_EDGE_FALL nINT2 */
+ MFP_CFG_OUT(GPIO60, AF0, DRIVE_LOW), /* D_WAKEUP */
+ GPIO62_GPIO, /* D_SUSPEND */
+ /* USB Host Controller */
+ GPIO2_GPIO | MFP_LPM_CAN_WAKEUP, /* MFP_LPM_EDGE_RISE nINT1 */
+ GPIO61_GPIO, /* H_SUSPEND */
+
+ GPIO63_GPIO, // | MFP_LPM_EDGE_FALL, //? IRQ_GPIO(63)
MFP_CFG_OUT(GPIO72, AF0, DRIVE_LOW), //? output
MFP_CFG_OUT(GPIO73, AF0, DRIVE_HIGH), //? output
@@ -260,36 +267,63 @@
/* PWM 0/1 */
GPIO16_PWM0_OUT,
+ GPIO17_PWM1_OUT,
/* I2S audio interface to Wolfson WM8731 */
GPIO28_I2S_BITCLK_OUT, /* BCLK */
GPIO29_I2S_SDATA_IN, /* ADCDAT */
GPIO30_I2S_SDATA_OUT, /* DACDAT */
GPIO31_I2S_SYNC, /**/
- GPIO32_I2S_SYSCLK, /**/
+ GPIO32_I2S_SYSCLK, /* XTI/MCLK */
/* SSP 1 control interface to Wolfson WM8731 */
GPIO23_SSP1_SCLK,
- GPIO24_SSP1_SFRM,
+ GPIO24_SSP1_SFRM, /* ADCDAT */
GPIO25_SSP1_TXD,
GPIO26_SSP1_RXD,
- GPIO61_GPIO,
};
-/* USB controller */
+/* isp116x USB controller */
+static void isp116x_hw_reset(void)
+{
+ unsigned long flags;
+
+ printk(KERN_INFO "isp116x: Hardware reset...");
+
+ local_irq_save(flags);
+
+ GPCR(65) = GPIO_bit(65); /* clear GPIO65 - activate nRESET */
+ udelay(300); /* AN10044: nRESET time min 160 uS */
+ GPSR(65) = GPIO_bit(65); /* set GPIO65 - deactivate nRESET */
+
+ local_irq_restore(flags);
+
+ mdelay(1);
+ printk(" done\n");
+}
static void isp116x_pfm_delay(struct device *dev, int delay)
{
- ndelay(delay);
+ /* 400Mhz PXA2 = 2.5ns / instruction */
+
+ int cyc = delay / 5; //10;
+
+ /* 4 Instructions = 4 x 2.5ns = 10ns */
+ __asm__ volatile ("0:\n"
+ "subs %0, %1, #1\n"
+ "bge 0b\n"
+ :"=r" (cyc)
+ :"0"(cyc)
+ );
}
static struct isp116x_platform_data isp116x_pfm_data = {
.sel15Kres = 1, /* Enable internal resistors on downstream ports */
.oc_enable = 0, /* On-chip overcurrent protection */
.int_act_high = 1, /* INT output polarity */
- .int_edge_triggered = 0, /* INT edge or level triggered */
+ .int_edge_triggered = 1, /* INT edge or level triggered */
.remote_wakeup_enable = 0, /* Wakeup by devices on usb bus */
.delay = isp116x_pfm_delay,
};
@@ -297,18 +331,18 @@
static struct resource isp116x_pfm_resources[] = {
[0] = {
.start = 0x0d000000, /* Host data port */
- .end = 0x0d000000,
+ .end = 0x0d000001,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = 0x0d000002, /* Host command port */
- .end = 0x0d000002,
+ .end = 0x0d000003,
.flags = IORESOURCE_MEM,
},
[2] = {
- .start = IRQ_GPIO(61),
- .end = IRQ_GPIO(61),
- .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
+ .start = IRQ_GPIO(2),
+ .end = IRQ_GPIO(2),
+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
},
};
@@ -382,9 +416,9 @@
static struct spi_board_info spi_board_info[] __initdata = {
[0] = {
- .modalias = "wm8731",
+ .modalias = "wm8731",
.max_speed_hz = 1843200,
- .bus_num = 1,
+ .bus_num = 1,
.chip_select = 0,
},
};
@@ -415,17 +449,17 @@
static struct mtd_partition mp900flash0_partitions[] = {
{
.name = "Bootloader",
- .size = 0x00040000,
+ .size = 0x00080000,
.offset = 0,
.mask_flags = MTD_WRITEABLE /* force read-only */
},{
.name = "Kernel",
.size = 0x00400000,
- .offset = 0x00040000,
+ .offset = 0x00080000,
},{
.name = "Filesystem",
.size = MTDPART_SIZ_FULL,
- .offset = 0x00440000
+ .offset = 0x00480000
}
};
@@ -500,6 +534,8 @@
pxa2xx_mfp_config(ARRAY_AND_SIZE(mp900_pin_config));
+ isp116x_hw_reset();
+
pxa_set_ffuart_info(NULL); /* RS232 connector */
pxa_set_ficp_info(&mp900_ficp_platform_data);