relocate linux/usb_isp1362.h to linux/usb/isp1362.h
remove bandwidth related code from isp1362 driver for upstream API
change
Signed-off-by: Thomas Chou <[EMAIL PROTECTED]>
diff --git a/linux-2.6.x/drivers/usb/host/isp1362-hcd.c
b/linux-2.6.x/drivers/usb/host/isp1362-hcd.c
index e672a99..676dab1 100644
--- a/linux-2.6.x/drivers/usb/host/isp1362-hcd.c
+++ b/linux-2.6.x/drivers/usb/host/isp1362-hcd.c
@@ -20,7 +20,7 @@
1. Configure your memory controller if it can accomodate such delays (the
best)
2. Implement platform-specific delay function possibly
combined with configuring the memory controller; see
- include/linux/usb_isp1362.h for more info.
+ include/linux/usb/isp1362.h for more info.
3. Use ndelay (easiest, poorest).
Use the corresponding macros USE_PLATFORM_DELAY and USE_NDELAY in the
@@ -76,7 +76,7 @@
#include <linux/list.h>
#include <linux/interrupt.h>
#include <linux/usb.h>
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
#include <linux/platform_device.h>
#include <linux/pm.h>
@@ -541,11 +541,6 @@ static void finish_request(struct isp1362_hcd
*isp1362_hcd, struct isp1362_ep *e
isp1362_hcd->load[ep->branch] - ep->load);
isp1362_hcd->load[ep->branch] -= ep->load;
ep->branch = PERIODIC_SIZE;
- if (urb->bandwidth) {
- DBG(0, "%s: Releasing bandwidth for urb %p ep %p req
%d\n",
- __FUNCTION__, urb, ep, ep->num_req);
- usb_release_bandwidth(urb->dev, urb,
usb_pipeisoc(urb->pipe));
- }
}
// async deschedule
if (!list_empty(&ep->schedule)) {
@@ -1127,7 +1122,7 @@ static irqreturn_t isp1362_irq(struct usb_hcd *hcd)
svc_mask &= ~HCuPINT_ISTL0;
isp1362_clr_mask16(isp1362_hcd, HCBUFSTAT,
HCBUFSTAT_ISTL0_FULL);
DBG(1, "%s: ISTL0\n", __FUNCTION__);
- // WARN_ON(isp1362_hcd->istl_flip);
+ WARN_ON((int)isp1362_hcd->istl_flip);
WARN_ON(isp1362_read_reg16(isp1362_hcd, HCBUFSTAT) &
HCBUFSTAT_ISTL0_ACTIVE);
WARN_ON(!isp1362_read_reg16(isp1362_hcd, HCBUFSTAT) &
HCBUFSTAT_ISTL0_DONE);
isp1362_hcd->irqenb &= ~HCuPINT_ISTL0;
@@ -1139,7 +1134,7 @@ static irqreturn_t isp1362_irq(struct usb_hcd *hcd)
svc_mask &= ~HCuPINT_ISTL1;
isp1362_clr_mask16(isp1362_hcd, HCBUFSTAT,
HCBUFSTAT_ISTL1_FULL);
DBG(1, "%s: ISTL1\n", __FUNCTION__);
- WARN_ON(!isp1362_hcd->istl_flip);
+ WARN_ON(!(int)isp1362_hcd->istl_flip);
WARN_ON(isp1362_read_reg16(isp1362_hcd, HCBUFSTAT) &
HCBUFSTAT_ISTL1_ACTIVE);
WARN_ON(!isp1362_read_reg16(isp1362_hcd, HCBUFSTAT) &
HCBUFSTAT_ISTL1_DONE);
isp1362_hcd->irqenb &= ~HCuPINT_ISTL1;
@@ -1437,7 +1432,6 @@ static int isp1362_urb_enqueue(struct usb_hcd *hcd,
struct usb_host_endpoint *he
} else {
DBG(1, "%s: ep %p already scheduled\n", __func__, ep);
}
- usb_claim_bandwidth(udev, urb, ep->load / ep->interval, type ==
PIPE_ISOCHRONOUS);
DBG(2, "%s: load %d bandwidth %d -> %d\n", __FUNCTION__,
ep->load / ep->interval, isp1362_hcd->load[ep->branch],
isp1362_hcd->load[ep->branch] + ep->load);
@@ -1581,15 +1575,21 @@ static int isp1362_hub_status_data(struct usb_hcd *hcd,
char *buf)
{
struct isp1362_hcd *isp1362_hcd = hcd_to_isp1362_hcd(hcd);
int ports, i, changed = 0;
- int can_suspend = 0; // hcd->can_wakeup;
+ unsigned long flags;
if (!HC_IS_RUNNING(hcd->state)) {
return -ESHUTDOWN;
}
+ /* Report no status change now, if we are scheduled to be
+ called later */
+ if (timer_pending(&hcd->rh_timer))
+ return 0;
+
ports = isp1362_hcd->rhdesca & RH_A_NDP;
BUG_ON(ports > 2);
+ spin_lock_irqsave(&isp1362_hcd->lock, flags);
/* init status */
if (isp1362_hcd->rhstatus & (RH_HS_LPSC | RH_HS_OCIC)) {
buf[0] = changed = 1;
@@ -1610,26 +1610,8 @@ static int isp1362_hub_status_data(struct usb_hcd *hcd,
char *buf)
if (!(status & RH_PS_CCS)) {
continue;
}
- // if ((status & RH_PS_PSS) && hcd->remote_wakeup) {
- // continue;
- // }
- can_suspend = 0;
- }
-#if defined(CONFIG_USB_SUSPEND) || defined(CONFIG_PM)
- if (can_suspend && !changed &&
- list_empty(&isp1362_hcd->async) &&
- list_empty(&isp1362_hcd->periodic) &&
- list_empty(&isp1362_hcd->isoc) &&
- (isp1362_read_reg32(isp1362_hcd, HCCONTROL) & OHCI_CTRL_HCFS) ==
OHCI_USB_OPER &&
- time_after(jiffies, isp1362_hcd->next_statechange) &&
- usb_trylock_device(hcd->self.root_hub)) {
- DBG(0, "%s: Autosuspending root hub\n", __FUNCTION__);
- isp1362_set_mask16(isp1362_hcd, HCHWCFG, HCHWCFG_CLKNOTSTOP);
- (void) isp1362_bus_suspend(hcd);
- hcd->state = HC_STATE_RUNNING;
- usb_unlock_device(hcd->self.root_hub);
}
-#endif
+ spin_unlock_irqrestore(&isp1362_hcd->lock, flags);
return changed;
}
@@ -1897,17 +1879,17 @@ static int isp1362_bus_suspend(struct usb_hcd *hcd)
mdelay(7);
if (isp1362_read_reg16(isp1362_hcd, HCuPINT) & HCuPINT_ATL) {
u32 done_map = isp1362_read_reg32(isp1362_hcd,
HCATLDONE);
- finish_transfers(isp1362_hcd, done_map,
&isp1362_hcd->atl_queue, NULL);
+ finish_transfers(isp1362_hcd, done_map,
&isp1362_hcd->atl_queue);
}
if (isp1362_read_reg16(isp1362_hcd, HCuPINT) & HCuPINT_INTL) {
u32 done_map = isp1362_read_reg32(isp1362_hcd,
HCINTLDONE);
- finish_transfers(isp1362_hcd, done_map,
&isp1362_hcd->intl_queue, NULL);
+ finish_transfers(isp1362_hcd, done_map,
&isp1362_hcd->intl_queue);
}
if (isp1362_read_reg16(isp1362_hcd, HCuPINT) & HCuPINT_ISTL0) {
- finish_iso_transfers(isp1362_hcd,
&isp1362_hcd->istl_queue[0] , NULL);
+ finish_iso_transfers(isp1362_hcd,
&isp1362_hcd->istl_queue[0]);
}
if (isp1362_read_reg16(isp1362_hcd, HCuPINT) & HCuPINT_ISTL1) {
- finish_iso_transfers(isp1362_hcd,
&isp1362_hcd->istl_queue[1], NULL);
+ finish_iso_transfers(isp1362_hcd,
&isp1362_hcd->istl_queue[1]);
}
}
DBG(0, "%s: HCINTSTAT: %08x\n", __FUNCTION__,
@@ -1917,11 +1899,6 @@ static int isp1362_bus_suspend(struct usb_hcd *hcd)
/* Suspend hub */
isp1362_hcd->hc_control = OHCI_USB_SUSPEND;
- /* maybe resume can wake root hub */
- if (hcd->remote_wakeup) {
- DBG(0, "%s: Enabling RWE\n", __FUNCTION__);
- isp1362_hcd->hc_control |= OHCI_CTRL_RWE;
- }
isp1362_show_reg(isp1362_hcd, HCCONTROL);
isp1362_write_reg32(isp1362_hcd, HCCONTROL, isp1362_hcd->hc_control);
isp1362_show_reg(isp1362_hcd, HCCONTROL);
@@ -2015,9 +1992,6 @@ static int isp1362_bus_resume(struct usb_hcd *hcd)
mdelay(20 /* usb 11.5.1.10 */ + 15);
isp1362_hcd->hc_control = OHCI_USB_OPER;
- if (hcd->can_wakeup) {
- isp1362_hcd->hc_control |= OHCI_CTRL_RWC;
- }
spin_lock_irqsave(&isp1362_hcd->lock, flags);
isp1362_show_reg(isp1362_hcd, HCCONTROL);
isp1362_write_reg32(isp1362_hcd, HCCONTROL, isp1362_hcd->hc_control);
@@ -2392,10 +2366,10 @@ static int isp1362_mem_config(struct usb_hcd *hcd)
dev_info(hcd->self.controller, "ISP1362 Memory usage:\n");
dev_info(hcd->self.controller, " ISTL: 2 * %4d: %4d @
$%04x:$%04x\n",
istl_size / 2, istl_size, 0, istl_size / 2);
- dev_info(hcd->self.controller, " INTL: %4d * (%3d+8): %4d @ $%04x\n",
+ dev_info(hcd->self.controller, " INTL: %4d * (%3ld+8): %4d @ $%04x\n",
ISP1362_INTL_BUFFERS, intl_blksize - PTD_HEADER_SIZE,
intl_size, istl_size);
- dev_info(hcd->self.controller, " ATL : %4d * (%3d+8): %4d @ $%04x\n",
+ dev_info(hcd->self.controller, " ATL : %4d * (%3ld+8): %4d @ $%04x\n",
atl_buffers, atl_blksize - PTD_HEADER_SIZE,
atl_size, istl_size + intl_size);
dev_info(hcd->self.controller, " USED/FREE: %4d %4d\n", total,
@@ -2516,7 +2490,7 @@ static int isp1362_hc_reset(struct usb_hcd *hcd)
ERR("Clock not ready after %lums\n", timeout);
ret = -ENODEV;
}
- return 0; // SKIP ret;
+ return ret;
}
static void isp1362_hc_stop(struct usb_hcd *hcd)
@@ -2747,10 +2721,6 @@ static int isp1362_hc_start(struct usb_hcd *hcd)
}
isp1362_hcd->hc_control = OHCI_USB_OPER;
- if (board->remote_wakeup_connected) {
- // hcd->can_wakeup = 1;
- isp1362_hcd->hc_control |= OHCI_CTRL_RWC;
- }
udev->speed = USB_SPEED_FULL;
hcd->state = HC_STATE_RUNNING;
@@ -2999,8 +2969,7 @@ static int isp1362_resume(struct platform_device *pdev)
DBG(0, "%s: Resuming\n", __FUNCTION__);
- if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND
- || !hcd->can_wakeup) {
+ if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
DBG(0, "%s: Resume RH ports\n", __FUNCTION__);
spin_lock_irqsave(&isp1362_hcd->lock, flags);
isp1362_write_reg32(isp1362_hcd, HCRHSTATUS, RH_HS_LPSC);
diff --git a/linux-2.6.x/drivers/usb/host/isp1362.h
b/linux-2.6.x/drivers/usb/host/isp1362.h
index 5d2b523..b9d1020 100644
--- a/linux-2.6.x/drivers/usb/host/isp1362.h
+++ b/linux-2.6.x/drivers/usb/host/isp1362.h
@@ -33,7 +33,7 @@
// insert platform specific definitions for other machines here
//#elif defined(CONFIG_ARCH_)
-#elif defined(CONFIG_BFIN)
+#elif defined(CONFIG_BLACKFIN)
#include <asm/io.h>
#define USE_32BIT 0
@@ -63,7 +63,7 @@ static inline void delayed_insw(unsigned int addr, void *buf,
int len)
unsigned short *bp = (unsigned short *) buf;
while (len--){
DUMMY_DELAY_ACCESS;
- *bp++ = inw(addr);
+ *bp++ = inw((void*)addr);
}
}
@@ -785,7 +785,7 @@ static void isp1362_read_fifo(struct isp1362_hcd
*isp1362_hcd, void *buf, u16 le
#endif
if (len >= 2) {
RDBG("%s: Using readsw for %d words\n", __FUNCTION__, len >> 1);
-#if 1
+#if 1
insw((unsigned long)isp1362_hcd->data_reg, dp, len >> 1);
dp += len & ~1;
len &= 1;
@@ -812,8 +812,18 @@ static void isp1362_write_fifo(struct isp1362_hcd
*isp1362_hcd, void *buf, u16 l
{
u8 *dp = buf;
u16 data;
+ u8 *temp = NULL;
_BUG_ON(!irqs_disabled());
+ if((unsigned)dp & 0x1) {
+ temp = kmalloc(len, GFP_KERNEL);
+ if (temp == NULL) {
+ printk(KERN_ERR "No memory available\n");
+ return;
+ }
+ memcpy(temp, dp, len);
+ dp = temp;
+ }
if (!len) {
return;
}
@@ -851,6 +861,9 @@ static void isp1362_write_fifo(struct isp1362_hcd
*isp1362_hcd, void *buf, u16 l
DUMMY_DELAY_ACCESS;
isp1362_write_data16(isp1362_hcd, data);
}
+ if (temp) {
+ kfree(temp);
+ }
}
#define isp1362_read_reg16(d, r) ({ \
diff --git a/linux-2.6.x/include/linux/usb/isp1362.h
b/linux-2.6.x/include/linux/usb/isp1362.h
new file mode 100644
index 0000000..c516715
--- /dev/null
+++ b/linux-2.6.x/include/linux/usb/isp1362.h
@@ -0,0 +1,42 @@
+
+/*
+ * board initialization code should put one of these into dev->platform_data
+ * and place the isp1362 onto platform_bus.
+ */
+
+struct isp1362_platform_data {
+ /* Enable internal pulldown resistors on downstream ports */
+ unsigned sel15Kres:1;
+ /* Clock cannot be stopped */
+ unsigned clknotstop:1;
+ /* On-chip overcurrent protection */
+ unsigned oc_enable:1;
+ /* INT output polarity */
+ unsigned int_act_high:1;
+ /* INT edge or level triggered */
+ unsigned int_edge_triggered:1;
+ /* DREQ output polarity */
+ unsigned dreq_act_high:1;
+ /* DACK input polarity */
+ unsigned dack_act_high:1;
+ /* chip can be resumed via H_WAKEUP pin */
+ unsigned remote_wakeup_connected:1;
+ /* Switch or not to switch (keep always powered) */
+ unsigned no_power_switching:1;
+ /* Ganged port power switching (0) or individual port power switching
(1) */
+ unsigned power_switching_mode:1;
+ /* Given port_power, msec/2 after power on till power good */
+ u8 potpg;
+ /* Hardware reset set/clear */
+ void (*reset) (struct device *dev, int set);
+ /* Clock start/stop */
+ void (*clock) (struct device *dev, int start);
+ /* Inter-io delay (ns). The chip is picky about access timings; it
+ expects at least:
+ 110ns delay between consecutive accesses to DATA_REG,
+ 300ns delay between access to ADDR_REG and DATA_REG (registers)
+ 462ns delay between access to ADDR_REG and DATA_REG (buffer memory)
+ WE MUST NOT be activated during these intervals (even without CS!)
+ */
+ void (*delay) (struct device *dev, unsigned int delay);
+};
diff --git a/linux-2.6.x/include/linux/usb_isp1362.h
b/linux-2.6.x/include/linux/usb_isp1362.h
deleted file mode 100644
index 381c3af..0000000
--- a/linux-2.6.x/include/linux/usb_isp1362.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * board initialization code should put one of these into dev->platform_data
- * and place the isp1362 onto platform_bus.
- */
-
-struct isp1362_platform_data {
- // Enable internal pulldown resistors on downstream ports
- unsigned sel15Kres:1;
- // Clock cannot be stopped
- unsigned clknotstop:1;
- // On-chip overcurrent protection
- unsigned oc_enable:1;
- // INT output polarity
- unsigned int_act_high:1;
- // INT edge or level triggered
- unsigned int_edge_triggered:1;
- // DREQ output polarity
- unsigned dreq_act_high:1;
- // DACK input polarity
- unsigned dack_act_high:1;
- // chip can be resumed via H_WAKEUP pin
- unsigned remote_wakeup_connected:1;
- // Switch or not to switch (keep always powered)
- unsigned no_power_switching:1;
- // Ganged port power switching (0) or individual port power switching
(1)
- unsigned power_switching_mode:1;
- // Given port_power, msec/2 after power on till power good
- u8 potpg;
- // Hardware reset set/clear
- void (*reset) (struct device *dev, int set);
- // Clock start/stop
- void (*clock) (struct device *dev, int start);
- /* Inter-io delay (ns). The chip is picky about access timings; it
- expects at least:
- 110ns delay between consecutive accesses to DATA_REG,
- 300ns delay between access to ADDR_REG and DATA_REG (registers)
- 462ns delay between access to ADDR_REG and DATA_REG (buffer memory)
- WE MUST NOT be activated during these intervals (even without CS!)
- */
- void (*delay) (struct device *dev, unsigned int delay);
-};
--
1.5.3.3
_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev