diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-01-27 18:48:51 -0800 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-01-27 18:48:51 -0800 |
| commit | 81178581cf2a7491a998572b2bae72a0bf4ff5b6 (patch) | |
| tree | fbb9ef5637c02011dc4919e812c1f860dca71919 | |
| parent | f2ec6d71bba130efa1a586362ec0871b831fb952 (diff) | |
| download | patches-81178581cf2a7491a998572b2bae72a0bf4ff5b6.tar.gz | |
more patches
17 files changed, 1882 insertions, 0 deletions
@@ -28,6 +28,8 @@ usb.current/usb-serial-add-usbid-for-dell-wwan-card-to-sierra.c.patch usb.current/kfifo-make-kfifo_initialized-work-after-kfifo_free.patch usb.current/usb-fhci-fix-build-after-kfifo-rework.patch usb.current/kfifo-don-t-use-integer-as-null-pointer.patch +usb.current/usb-g_multi-fix-config_usb_g_multi_rndis-usage.patch +usb.current/usb-otg-kconfig-let-usb_otg_utils-select-usb_ulpi-option.patch @@ -265,6 +267,14 @@ usb/usb-trivial-missing-newline-in-usb-core-warning-message.patch usb/usb-s3c-hsotg-staticise-non-exported-functions.patch usb/usb-usbfs_snoop-add-data-logging-back-in.patch usb/usb-remove-obsolete-config-in-kernel-source-usb_hcd_dma.patch +usb/usb-musb-add-context-save-and-restore-support.patch +usb/usb-musb-get-rid-of-omap_readl-writel.patch +usb/usb-musb-we-already-tested-for-dyn_fifo.patch +usb/usb-musb-deprecate-what-we-don-t-use.patch +usb/usb-musb-tusb6010-use-resource_size.patch +usb/usb-musb-unmap-base-if-we-can-t-probe.patch +usb/usb-musb-only-print-info-message-if-probe-is-successful.patch +usb/usb-s3c-hsotg-replace-deprecated-dma_sync_single.patch @@ -495,5 +505,12 @@ staging/staging-et131x-kill-the-rxmac-error_reg_t.patch staging/staging-et131x-kill-off-the-rxmac-ctrl-type.patch staging/staging-et131x_kill-mac_stat_t.patch staging/staging-hv-remove-xen-legacy-code-and-check-for-hyper-v.patch +staging/staging-usbip-minor-code-cleanup.patch +staging/staging-usbip-use-print_hex_dump-instead-of-open-coding-it.patch +staging/staging-usbip-cleanup-removing-dead-code.patch +staging/staging-usbip-seperate-usbip-config-debug-from-config_usb_debug.patch +staging/staging-otus-fix-memory-leak.patch +staging/staging-r8187se-fix-a-faulty-if-and-do-additional-cleanups.patch + diff --git a/staging/staging-otus-fix-memory-leak.patch b/staging/staging-otus-fix-memory-leak.patch new file mode 100644 index 00000000000000..f4eade7f26adc3 --- /dev/null +++ b/staging/staging-otus-fix-memory-leak.patch @@ -0,0 +1,37 @@ +From dcb314@hotmail.com Wed Jan 27 18:30:27 2010 +From: d binderman <dcb314@hotmail.com> +Date: Tue, 26 Jan 2010 10:00:25 +0000 +Subject: Staging: otus: fix memory leak +To: <gregkh@suse.de> +Message-ID: <BLU108-W17B331BF278377532631D79C5E0@phx.gbl> + + +Fix memory leak in drivers/staging/otus + +Signed-off-by: David Binderman <dcb314@hotmail.com> + +--- + drivers/staging/otus/ioctl.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/staging/otus/ioctl.c ++++ b/drivers/staging/otus/ioctl.c +@@ -866,15 +866,15 @@ int usbdrvwext_giwscan(struct net_device + char *current_ev = extra; + char *end_buf; + int i; +- /* struct zsBssList BssList; */ +- struct zsBssListV1 *pBssList = kmalloc(sizeof(struct zsBssListV1), +- GFP_KERNEL); + /* BssList = wd->sta.pBssList; */ + /* zmw_get_wlan_dev(dev); */ + + if (macp->DeviceOpened != 1) + return 0; + ++ /* struct zsBssList BssList; */ ++ struct zsBssListV1 *pBssList = kmalloc(sizeof(struct zsBssListV1), ++ GFP_KERNEL); + if (data->length == 0) + end_buf = extra + IW_SCAN_MAX_DATA; + else diff --git a/staging/staging-r8187se-fix-a-faulty-if-and-do-additional-cleanups.patch b/staging/staging-r8187se-fix-a-faulty-if-and-do-additional-cleanups.patch new file mode 100644 index 00000000000000..d155890e62bcc9 --- /dev/null +++ b/staging/staging-r8187se-fix-a-faulty-if-and-do-additional-cleanups.patch @@ -0,0 +1,591 @@ +From Larry.Finger@lwfinger.net Wed Jan 27 18:31:24 2010 +From: Larry Finger <Larry.Finger@lwfinger.net> +Date: Mon, 25 Jan 2010 13:11:49 -0600 +Subject: Staging: r8187se: Fix a faulty if and do additional cleanups +To: Greg Kroah-Hartman <gregkh@suse.de> +Cc: devel@driverdev.osuosl.org +Message-ID: <4b5decf5.ZLFf/PQzag1JNlAo%Larry.Finger@lwfinger.net> + + +Cleanup the driver and fix a faulty if statement. + +Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> +Tested by: Bernhard Schiffner <bernhard@schiffner-limbach.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/rtl8187se/r8180_core.c | 303 +++++++++++++-------------------- + 1 file changed, 121 insertions(+), 182 deletions(-) + +--- a/drivers/staging/rtl8187se/r8180_core.c ++++ b/drivers/staging/rtl8187se/r8180_core.c +@@ -41,13 +41,6 @@ + + #include "ieee80211/dot11d.h" + +-#ifndef PCI_VENDOR_ID_BELKIN +- #define PCI_VENDOR_ID_BELKIN 0x1799 +-#endif +-#ifndef PCI_VENDOR_ID_DLINK +- #define PCI_VENDOR_ID_DLINK 0x1186 +-#endif +- + static struct pci_device_id rtl8180_pci_id_tbl[] __devinitdata = { + { + .vendor = PCI_VENDOR_ID_REALTEK, +@@ -1421,11 +1414,9 @@ u16 N_DBPSOfRate(u16 DataRate) + return N_DBPS; + } + +-//{by amy 080312 + // + // Description: + // For Netgear case, they want good-looking singal strength. +-// 2004.12.05, by rcnjko. + // + long NetgearSignalStrengthTranslate(long LastSS, long CurrSS) + { +@@ -1481,7 +1472,6 @@ long TranslateToDbm8185(u8 SignalStrengt + // This is different with PerformSignalSmoothing8185 in smoothing fomula. + // No dramatic adjustion is apply because dynamic mechanism need some degree + // of correctness. Ported from 8187B. +-// 2007-02-26, by Bruce. + // + void PerformUndecoratedSignalSmoothing8185(struct r8180_priv *priv, + bool bCckRate) +@@ -1502,7 +1492,6 @@ void PerformUndecoratedSignalSmoothing81 + priv->CurCCKRSSI = 0; + } + +-//by amy 080312} + + /* This is rough RX isr handling routine*/ + void rtl8180_rx(struct net_device *dev) +@@ -1638,7 +1627,7 @@ void rtl8180_rx(struct net_device *dev) + } + + signal=(unsigned char)(((*(priv->rxringtail+3))& (0x00ff0000))>>16); +- signal=(signal&0xfe)>>1; // Modify by hikaru 6.6 ++ signal = (signal & 0xfe) >> 1; + + quality=(unsigned char)((*(priv->rxringtail+3)) & (0xff)); + +@@ -1652,7 +1641,6 @@ void rtl8180_rx(struct net_device *dev) + + stats.rate = rtl8180_rate2rate(rate); + Antenna = (((*(priv->rxringtail +3))& (0x00008000)) == 0 )? 0:1 ; +-//by amy for antenna + if(!rtl8180_IsWirelessBMode(stats.rate)) + { // OFDM rate. + +@@ -1691,11 +1679,10 @@ void rtl8180_rx(struct net_device *dev) + RXAGC=(95-RXAGC)*100/65; + } + priv->SignalStrength = (u8)RXAGC; +- priv->RecvSignalPower = RxAGC_dBm ; // It can use directly by SD3 CMLin ++ priv->RecvSignalPower = RxAGC_dBm; + priv->RxPower = rxpower; + priv->RSSI = RSSI; +-//{by amy 080312 +- // SQ translation formular is provided by SD3 DZ. 2006.06.27, by rcnjko. ++ /* SQ translation formula is provided by SD3 DZ. 2006.06.27 */ + if(quality >= 127) + quality = 1;//0; //0 will cause epc to show signal zero , walk aroud now; + else if(quality < 27) +@@ -1712,7 +1699,6 @@ void rtl8180_rx(struct net_device *dev) + // printk("==========================>rx : RXAGC is %d,signalstrength is %d\n",RXAGC,stats.signalstrength); + stats.rssi = priv->wstats.qual.qual = priv->SignalQuality; + stats.noise = priv->wstats.qual.noise = 100 - priv ->wstats.qual.qual; +-//by amy 080312} + bHwError = (((*(priv->rxringtail))& (0x00000fff)) == 4080)| (((*(priv->rxringtail))& (0x04000000)) != 0 ) + | (((*(priv->rxringtail))& (0x08000000)) != 0 )| (((~(*(priv->rxringtail)))& (0x10000000)) != 0 )| (((~(*(priv->rxringtail)))& (0x20000000)) != 0 ); + bCRC = ((*(priv->rxringtail)) & (0x00002000)) >> 13; +@@ -1725,11 +1711,12 @@ void rtl8180_rx(struct net_device *dev) + (eqMacAddr(priv->ieee80211->current_network.bssid, (fc & IEEE80211_FCTL_TODS)? hdr->addr1 : (fc & IEEE80211_FCTL_FROMDS )? hdr->addr2 : hdr->addr3)) + && (!bHwError) && (!bCRC)&& (!bICV)) + { +-//by amy 080312 +- // Perform signal smoothing for dynamic mechanism on demand. +- // This is different with PerformSignalSmoothing8185 in smoothing fomula. +- // No dramatic adjustion is apply because dynamic mechanism need some degree +- // of correctness. 2007.01.23, by shien chang. ++ /* Perform signal smoothing for dynamic ++ * mechanism on demand. This is different ++ * with PerformSignalSmoothing8185 in smoothing ++ * fomula. No dramatic adjustion is apply ++ * because dynamic mechanism need some degree ++ * of correctness. */ + PerformUndecoratedSignalSmoothing8185(priv,bCckRate); + // + // For good-looking singal strength. +@@ -1749,12 +1736,9 @@ void rtl8180_rx(struct net_device *dev) + + // Figure out which antenna that received the lasted packet. + priv->LastRxPktAntenna = Antenna ? 1 : 0; // 0: aux, 1: main. +-//by amy 080312 + SwAntennaDiversityRxOk8185(dev, priv->SignalStrength); + } + +-//by amy for antenna +-#ifndef DUMMY_RX + if(first){ + if(!priv->rx_skb_complete){ + /* seems that HW sometimes fails to reiceve and +@@ -1810,19 +1794,12 @@ void rtl8180_rx(struct net_device *dev) + if(last && !priv->rx_skb_complete){ + if(priv->rx_skb->len > 4) + skb_trim(priv->rx_skb,priv->rx_skb->len-4); +-#ifndef RX_DONT_PASS_UL + if(!ieee80211_rtl_rx(priv->ieee80211, +- priv->rx_skb, &stats)){ +-#endif // RX_DONT_PASS_UL +- ++ priv->rx_skb, &stats)) + dev_kfree_skb_any(priv->rx_skb); +-#ifndef RX_DONT_PASS_UL +- } +-#endif + priv->rx_skb_complete=1; + } + +-#endif //DUMMY_RX + pci_dma_sync_single_for_device(priv->pdev, + priv->rxbuffer->dma, + priv->rxbuffersize * \ +@@ -2056,7 +2033,7 @@ short rtl8180_tx(struct net_device *dev, + u16 RtsDur = 0; + u16 ThisFrameTime = 0; + u16 TxDescDuration = 0; +- u8 ownbit_flag = false; //added by david woo for sync Tx, 2007.12.14 ++ u8 ownbit_flag = false; + + switch(priority) { + case MANAGE_PRIORITY: +@@ -2123,7 +2100,8 @@ short rtl8180_tx(struct net_device *dev, + //YJ,add,080828,for Keep alive + priv->NumTxUnicast++; + +- // Figure out ACK rate according to BSS basic rate and Tx rate, 2006.03.08 by rcnjko. ++ /* Figure out ACK rate according to BSS basic rate ++ * and Tx rate. */ + AckTime = ComputeTxTime(14, 10,0, 0); // AckCTSLng = 14 use 1M bps send + + if ( ((len + sCrcLng) > priv->rts) && priv->rts ) +@@ -2206,7 +2184,7 @@ short rtl8180_tx(struct net_device *dev, + *tail |= (1<<15); /* no encrypt */ + + if(remain==len && !descfrag) { +- ownbit_flag = false; //added by david woo,2007.12.14 ++ ownbit_flag = false; + *tail = *tail| (1<<29) ; //fist segment of the packet + *tail = *tail |(len); + } else { +@@ -2556,27 +2534,16 @@ void watch_dog_adaptive(unsigned long da + } + + // Tx High Power Mechanism. +-#ifdef HIGH_POWER + if(CheckHighPower((struct net_device *)data)) +- { + queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->tx_pw_wq); +- } +-#endif + + // Tx Power Tracking on 87SE. +-#ifdef TX_TRACK +- //if( priv->bTxPowerTrack ) //lzm mod 080826 + if (CheckTxPwrTracking((struct net_device *)data)) + TxPwrTracking87SE((struct net_device *)data); +-#endif + + // Perform DIG immediately. +-#ifdef SW_DIG + if(CheckDig((struct net_device *)data) == true) +- { + queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->hw_dig_wq); +- } +-#endif + rtl8180_watch_dog((struct net_device *)data); + + queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->GPIOChangeRFWorkItem); +@@ -2747,10 +2714,8 @@ short rtl8180_init(struct net_device *de + priv->TxPollingTimes = 0;//lzm add 080826 + priv->bLeisurePs = true; + priv->dot11PowerSaveMode = eActive; +-//by amy for antenna + priv->AdMinCheckPeriod = 5; + priv->AdMaxCheckPeriod = 10; +-// Lower signal strength threshold to fit the HW participation in antenna diversity. +by amy 080312 + priv->AdMaxRxSsThreshold = 30;//60->30 + priv->AdRxSsThreshold = 20;//50->20 + priv->AdCheckPeriod = priv->AdMinCheckPeriod; +@@ -2765,8 +2730,6 @@ short rtl8180_init(struct net_device *de + init_timer(&priv->SwAntennaDiversityTimer); + priv->SwAntennaDiversityTimer.data = (unsigned long)dev; + priv->SwAntennaDiversityTimer.function = (void *)SwAntennaDiversityTimerCallback; +-//by amy for antenna +-//{by amy 080312 + priv->bDigMechanism = 1; + priv->InitialGain = 6; + priv->bXtalCalibration = false; +@@ -2803,58 +2766,63 @@ short rtl8180_init(struct net_device *de + priv->NumTxUnicast = 0; + priv->keepAliveLevel = DEFAULT_KEEP_ALIVE_LEVEL; + priv->PowerProfile = POWER_PROFILE_AC; +- priv->CurrRetryCnt=0; +- priv->LastRetryCnt=0; +- priv->LastTxokCnt=0; +- priv->LastRxokCnt=0; +- priv->LastRetryRate=0; +- priv->bTryuping=0; +- priv->CurrTxRate=0; +- priv->CurrRetryRate=0; +- priv->TryupingCount=0; +- priv->TryupingCountNoData=0; +- priv->TryDownCountLowData=0; +- priv->LastTxOKBytes=0; +- priv->LastFailTxRate=0; +- priv->LastFailTxRateSS=0; +- priv->FailTxRateCount=0; +- priv->LastTxThroughput=0; +- priv->NumTxOkBytesTotal=0; ++ priv->CurrRetryCnt = 0; ++ priv->LastRetryCnt = 0; ++ priv->LastTxokCnt = 0; ++ priv->LastRxokCnt = 0; ++ priv->LastRetryRate = 0; ++ priv->bTryuping = 0; ++ priv->CurrTxRate = 0; ++ priv->CurrRetryRate = 0; ++ priv->TryupingCount = 0; ++ priv->TryupingCountNoData = 0; ++ priv->TryDownCountLowData = 0; ++ priv->LastTxOKBytes = 0; ++ priv->LastFailTxRate = 0; ++ priv->LastFailTxRateSS = 0; ++ priv->FailTxRateCount = 0; ++ priv->LastTxThroughput = 0; ++ priv->NumTxOkBytesTotal = 0; + priv->ForcedDataRate = 0; + priv->RegBModeGainStage = 1; + +- priv->promisc = (dev->flags & IFF_PROMISC) ? 1:0; ++ priv->promisc = (dev->flags & IFF_PROMISC) ? 1 : 0; + spin_lock_init(&priv->irq_lock); + spin_lock_init(&priv->irq_th_lock); + spin_lock_init(&priv->tx_lock); + spin_lock_init(&priv->ps_lock); + spin_lock_init(&priv->rf_ps_lock); +- sema_init(&priv->wx_sem,1); +- sema_init(&priv->rf_state,1); +- INIT_WORK(&priv->reset_wq,(void*) rtl8180_restart_wq); +- INIT_WORK(&priv->tx_irq_wq,(void*) rtl8180_tx_irq_wq); +- INIT_DELAYED_WORK(&priv->ieee80211->hw_wakeup_wq,(void*) rtl8180_hw_wakeup_wq); +- INIT_DELAYED_WORK(&priv->ieee80211->hw_sleep_wq,(void*) rtl8180_hw_sleep_wq); +- INIT_WORK(&priv->ieee80211->wmm_param_update_wq,(void*) rtl8180_wmm_param_update); +- INIT_DELAYED_WORK(&priv->ieee80211->rate_adapter_wq,(void*)rtl8180_rate_adapter);//+by amy 080312 +- INIT_DELAYED_WORK(&priv->ieee80211->hw_dig_wq,(void*)rtl8180_hw_dig_wq);//+by amy 080312 +- INIT_DELAYED_WORK(&priv->ieee80211->tx_pw_wq,(void*)rtl8180_tx_pw_wq);//+by amy 080312 +- +- INIT_DELAYED_WORK(&priv->ieee80211->GPIOChangeRFWorkItem,(void*) GPIOChangeRFWorkItemCallBack); +- ++ sema_init(&priv->wx_sem, 1); ++ sema_init(&priv->rf_state, 1); ++ INIT_WORK(&priv->reset_wq, (void *)rtl8180_restart_wq); ++ INIT_WORK(&priv->tx_irq_wq, (void *)rtl8180_tx_irq_wq); ++ INIT_DELAYED_WORK(&priv->ieee80211->hw_wakeup_wq, ++ (void *)rtl8180_hw_wakeup_wq); ++ INIT_DELAYED_WORK(&priv->ieee80211->hw_sleep_wq, ++ (void *)rtl8180_hw_sleep_wq); ++ INIT_WORK(&priv->ieee80211->wmm_param_update_wq, ++ (void *)rtl8180_wmm_param_update); ++ INIT_DELAYED_WORK(&priv->ieee80211->rate_adapter_wq, ++ (void *)rtl8180_rate_adapter); ++ INIT_DELAYED_WORK(&priv->ieee80211->hw_dig_wq, ++ (void *)rtl8180_hw_dig_wq); ++ INIT_DELAYED_WORK(&priv->ieee80211->tx_pw_wq, ++ (void *)rtl8180_tx_pw_wq); ++ INIT_DELAYED_WORK(&priv->ieee80211->GPIOChangeRFWorkItem, ++ (void *) GPIOChangeRFWorkItemCallBack); + tasklet_init(&priv->irq_rx_tasklet, + (void(*)(unsigned long)) rtl8180_irq_rx_tasklet, + (unsigned long)priv); + +- init_timer(&priv->watch_dog_timer); ++ init_timer(&priv->watch_dog_timer); + priv->watch_dog_timer.data = (unsigned long)dev; + priv->watch_dog_timer.function = watch_dog_adaptive; + +- init_timer(&priv->rateadapter_timer); +- priv->rateadapter_timer.data = (unsigned long)dev; +- priv->rateadapter_timer.function = timer_rate_adaptive; +- priv->RateAdaptivePeriod= RATE_ADAPTIVE_TIMER_PERIOD; +- priv->bEnhanceTxPwr=false; ++ init_timer(&priv->rateadapter_timer); ++ priv->rateadapter_timer.data = (unsigned long)dev; ++ priv->rateadapter_timer.function = timer_rate_adaptive; ++ priv->RateAdaptivePeriod = RATE_ADAPTIVE_TIMER_PERIOD; ++ priv->bEnhanceTxPwr = false; + + priv->ieee80211->softmac_hard_start_xmit = rtl8180_hard_start_xmit; + priv->ieee80211->set_chan = rtl8180_set_chan; +@@ -2877,30 +2845,28 @@ short rtl8180_init(struct net_device *de + + priv->CSMethod = (0x01 << 29); + +- priv->TransmitConfig = +- 1<<TCR_DurProcMode_OFFSET | //for RTL8185B, duration setting by HW +- (7<<TCR_MXDMA_OFFSET) | // Max DMA Burst Size per Tx DMA Burst, 7: reservied. +- (priv->ShortRetryLimit<<TCR_SRL_OFFSET) | // Short retry limit +- (priv->LongRetryLimit<<TCR_LRL_OFFSET) | // Long retry limit +- (0 ? TCR_SAT : 0); // FALSE: HW provies PLCP length and LENGEXT, TURE: SW proiveds them +- +- priv->ReceiveConfig = +- RCR_AMF | RCR_ADF | //accept management/data +- RCR_ACF | //accept control frame for SW AP needs PS-poll, 2005.07.07, by rcnjko. +- RCR_AB | RCR_AM | RCR_APM | //accept BC/MC/UC +- (7<<RCR_MXDMA_OFFSET) | // Max DMA Burst Size per Rx DMA Burst, 7: unlimited. +- (priv->EarlyRxThreshold<<RCR_FIFO_OFFSET) | // Rx FIFO Threshold, 7: No Rx threshold. +- (priv->EarlyRxThreshold == 7 ? RCR_ONLYERLPKT:0); ++ priv->TransmitConfig = TCR_DurProcMode_OFFSET | ++ (7<<TCR_MXDMA_OFFSET) | ++ (priv->ShortRetryLimit<<TCR_SRL_OFFSET) | ++ (priv->LongRetryLimit<<TCR_LRL_OFFSET) | ++ (0 ? TCR_SAT : 0); ++ ++ priv->ReceiveConfig = RCR_AMF | RCR_ADF | RCR_ACF | ++ RCR_AB | RCR_AM | RCR_APM | ++ (7<<RCR_MXDMA_OFFSET) | ++ (priv->EarlyRxThreshold<<RCR_FIFO_OFFSET) | ++ (priv->EarlyRxThreshold == 7 ? ++ RCR_ONLYERLPKT : 0); + + priv->IntrMask = IMR_TMGDOK | IMR_TBDER | IMR_THPDER | +- IMR_THPDER | IMR_THPDOK | +- IMR_TVODER | IMR_TVODOK | +- IMR_TVIDER | IMR_TVIDOK | +- IMR_TBEDER | IMR_TBEDOK | +- IMR_TBKDER | IMR_TBKDOK | +- IMR_RDU | // To handle the defragmentation not enough Rx descriptors case. Annie, 2006-03-27. +- IMR_RER | IMR_ROK | +- IMR_RQoSOK; // <NOTE> ROK and RQoSOK are mutually exclusive, so, we must handle RQoSOK interrupt to receive QoS frames, 2005.12.09, by rcnjko. ++ IMR_THPDER | IMR_THPDOK | ++ IMR_TVODER | IMR_TVODOK | ++ IMR_TVIDER | IMR_TVIDOK | ++ IMR_TBEDER | IMR_TBEDOK | ++ IMR_TBKDER | IMR_TBKDOK | ++ IMR_RDU | ++ IMR_RER | IMR_ROK | ++ IMR_RQoSOK; + + priv->InitialGain = 6; + +@@ -2968,25 +2934,22 @@ short rtl8180_init(struct net_device *de + for (i = 1, j = 0; i < 14; i += 2, j++) { + word = eprom_read(dev, EPROM_TXPW_OFDM_CH1_2 + j); + priv->chtxpwr_ofdm[i] = word & 0xff; +- priv->chtxpwr_ofdm[i+1] = (word & 0xff00)>>8; ++ priv->chtxpwr_ofdm[i+1] = (word & 0xff00) >> 8; + } + +- //3Read crystal calibtration and thermal meter indication on 87SE. +- +- // By SD3 SY's request. Added by Roger, 2007.12.11. ++ /* 3Read crystal calibtration and thermal meter indication on 87SE. */ + +- tmpu16 = eprom_read(dev, EEPROM_RSV>>1); +- +- // Crystal calibration for Xin and Xout resp. +- priv->XtalCal_Xout = tmpu16 & EEPROM_XTAL_CAL_XOUT_MASK; // 0~7.5pF +- priv->XtalCal_Xin = (tmpu16 & EEPROM_XTAL_CAL_XIN_MASK)>>4; // 0~7.5pF +- if((tmpu16 & EEPROM_XTAL_CAL_ENABLE)>>12) +- priv->bXtalCalibration = true; +- +- // Thermal meter reference indication. +- priv->ThermalMeter = (u8)((tmpu16 & EEPROM_THERMAL_METER_MASK)>>8); +- if((tmpu16 & EEPROM_THERMAL_METER_ENABLE)>>13) +- priv->bTxPowerTrack = true; ++ tmpu16 = eprom_read(dev, EEPROM_RSV >> 1); ++ /* Crystal calibration for Xin and Xout resp. */ ++ priv->XtalCal_Xout = tmpu16 & EEPROM_XTAL_CAL_XOUT_MASK; ++ priv->XtalCal_Xin = (tmpu16 & EEPROM_XTAL_CAL_XIN_MASK) >> 4; ++ if ((tmpu16 & EEPROM_XTAL_CAL_ENABLE) >> 12) ++ priv->bXtalCalibration = true; ++ ++ /* Thermal meter reference indication. */ ++ priv->ThermalMeter = (u8)((tmpu16 & EEPROM_THERMAL_METER_MASK) >> 8); ++ if ((tmpu16 & EEPROM_THERMAL_METER_ENABLE) >> 13) ++ priv->bTxPowerTrack = true; + + word = eprom_read(dev,EPROM_TXPW_BASE); + priv->cck_txpwr_base = word & 0xf; +@@ -3010,7 +2973,6 @@ short rtl8180_init(struct net_device *de + priv->rf_set_chan = rtl8225z2_rf_set_chan; + priv->rf_set_sens = NULL; + +- + if (0!=alloc_rx_desc_ring(dev, priv->rxbuffersize, priv->rxringcount)) + return -ENOMEM; + +@@ -3042,11 +3004,7 @@ short rtl8180_init(struct net_device *de + TX_BEACON_RING_ADDR)) + return -ENOMEM; + +-#if !defined(SA_SHIRQ) + if(request_irq(dev->irq, (void *)rtl8180_interrupt, IRQF_SHARED, dev->name, dev)){ +-#else +- if(request_irq(dev->irq, (void *)rtl8180_interrupt, SA_SHIRQ, dev->name, dev)){ +-#endif + DMESGE("Error allocating IRQ %d",dev->irq); + return -1; + }else{ +@@ -3335,7 +3293,6 @@ static struct net_device_stats *rtl8180_ + } + // + // Change current and default preamble mode. +-// 2005.01.06, by rcnjko. + // + bool + MgntActSet_802_11_PowerSaveMode( +@@ -3454,7 +3411,6 @@ void rtl8180_watch_dog(struct net_device + MgntLinkKeepAlive(priv); + + //YJ,add,080828,for LPS +-#ifdef ENABLE_LPS + if (priv->PowerProfile == POWER_PROFILE_BATTERY) + priv->bLeisurePs = true; + else if (priv->PowerProfile == POWER_PROFILE_AC) { +@@ -3464,7 +3420,6 @@ void rtl8180_watch_dog(struct net_device + + if(priv->ieee80211->state == IEEE80211_LINKED){ + priv->link_detect.NumRxOkInPeriod = priv->ieee80211->NumRxDataInPeriod; +- //printk("TxOk=%d RxOk=%d\n", priv->link_detect.NumTxOkInPeriod, priv->link_detect.NumRxOkInPeriod); + if( priv->link_detect.NumRxOkInPeriod> 666 || + priv->link_detect.NumTxOkInPeriod> 666 ) { + bBusyTraffic = true; +@@ -3481,7 +3436,6 @@ void rtl8180_watch_dog(struct net_device + LeisurePSLeave(priv); + } else + LeisurePSLeave(priv); +-#endif + priv->link_detect.bBusyTraffic = bBusyTraffic; + priv->link_detect.NumRxOkInPeriod = 0; + priv->link_detect.NumTxOkInPeriod = 0; +@@ -3503,16 +3457,11 @@ int _rtl8180_up(struct net_device *dev) + if(priv->ieee80211->iw_mode == IW_MODE_ADHOC) + IPSLeave(dev); + } +-#ifdef RATE_ADAPT + timer_rate_adaptive((unsigned long)dev); +-#endif + watch_dog_adaptive((unsigned long)dev); +-#ifdef SW_ANTE + if(priv->bSwAntennaDiverity) + SwAntennaDiversityTimerCallback(dev); +-#endif + ieee80211_softmac_start_protocol(priv->ieee80211); +- + return 0; + } + +@@ -3748,7 +3697,7 @@ static int __devinit rtl8180_pci_probe(s + dev->wireless_handlers = &r8180_wx_handlers_def; + + dev->type=ARPHRD_ETHER; +- dev->watchdog_timeo = HZ*3; //added by david woo, 2007.12.13 ++ dev->watchdog_timeo = HZ*3; + + if (dev_alloc_name(dev, ifname) < 0){ + DMESG("Oops: devname already taken! Trying wlan%%d...\n"); +@@ -4236,60 +4185,50 @@ void GPIOChangeRFWorkItemCallBack(struct + static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL}; + static int readf_count = 0; + +-#ifdef ENABLE_LPS + if(readf_count % 10 == 0) + priv->PowerProfile = read_acadapter_file("/proc/acpi/ac_adapter/AC0/state"); + + readf_count = (readf_count+1)%0xffff; +-#endif +- { +- // We should turn off LED before polling FF51[4]. ++ /* We should turn off LED before polling FF51[4]. */ + +- //Turn off LED. +- btPSR = read_nic_byte(dev, PSR); +- write_nic_byte(dev, PSR, (btPSR & ~BIT3)); ++ /* Turn off LED. */ ++ btPSR = read_nic_byte(dev, PSR); ++ write_nic_byte(dev, PSR, (btPSR & ~BIT3)); + +- //It need to delay 4us suggested by Jong, 2008-01-16 +- udelay(4); ++ /* It need to delay 4us suggested by Jong, 2008-01-16 */ ++ udelay(4); + +- //HW radio On/Off according to the value of FF51[4](config0) +- btConfig0 = btPSR = read_nic_byte(dev, CONFIG0); ++ /* HW radio On/Off according to the value of FF51[4](config0) */ ++ btConfig0 = btPSR = read_nic_byte(dev, CONFIG0); + +- //Turn on LED. +- write_nic_byte(dev, PSR, btPSR| BIT3); ++ /* Turn on LED. */ ++ write_nic_byte(dev, PSR, btPSR | BIT3); + +- eRfPowerStateToSet = (btConfig0 & BIT4) ? eRfOn : eRfOff; ++ eRfPowerStateToSet = (btConfig0 & BIT4) ? eRfOn : eRfOff; + +- if((priv->ieee80211->bHwRadioOff == true) && (eRfPowerStateToSet == eRfOn)) +- { +- priv->ieee80211->bHwRadioOff = false; +- bActuallySet = true; +- } +- else if((priv->ieee80211->bHwRadioOff == false) && (eRfPowerStateToSet == eRfOff)) +- { +- priv->ieee80211->bHwRadioOff = true; +- bActuallySet = true; +- } ++ if ((priv->ieee80211->bHwRadioOff == true) && ++ (eRfPowerStateToSet == eRfOn)) { ++ priv->ieee80211->bHwRadioOff = false; ++ bActuallySet = true; ++ } else if ((priv->ieee80211->bHwRadioOff == false) && ++ (eRfPowerStateToSet == eRfOff)) { ++ priv->ieee80211->bHwRadioOff = true; ++ bActuallySet = true; ++ } + +- if(bActuallySet) +- { +- MgntActSet_RF_State(dev, eRfPowerStateToSet, RF_CHANGE_BY_HW); ++ if (bActuallySet) { ++ MgntActSet_RF_State(dev, eRfPowerStateToSet, RF_CHANGE_BY_HW); + +- /* To update the UI status for Power status changed */ +- if(priv->ieee80211->bHwRadioOff == true) +- argv[1] = "RFOFF"; +- else{ +- //if(!priv->RfOffReason) +- argv[1] = "RFON"; +- //else +- // argv[1] = "RFOFF"; +- } +- argv[0] = RadioPowerPath; +- argv[2] = NULL; ++ /* To update the UI status for Power status changed */ ++ if (priv->ieee80211->bHwRadioOff == true) ++ argv[1] = "RFOFF"; ++ else ++ argv[1] = "RFON"; ++ argv[0] = RadioPowerPath; ++ argv[2] = NULL; + +- call_usermodehelper(RadioPowerPath,argv,envp,1); +- } +- } ++ call_usermodehelper(RadioPowerPath, argv, envp, 1); ++ } + } + + static u8 read_acadapter_file(char *filename) diff --git a/staging/staging-usbip-cleanup-removing-dead-code.patch b/staging/staging-usbip-cleanup-removing-dead-code.patch new file mode 100644 index 00000000000000..aebf3e058301ad --- /dev/null +++ b/staging/staging-usbip-cleanup-removing-dead-code.patch @@ -0,0 +1,79 @@ +From himanshu@symmetricore.com Wed Jan 27 18:27:42 2010 +From: Himanshu Chauhan <himanshu@symmetricore.com> +Date: Sat, 23 Jan 2010 10:36:56 +0530 +Subject: Staging: usbip: Remove dead code +Cc: greg@kroah.com +Message-ID: <1264223216-27529-1-git-send-email-himanshu@symmetricore.com> + +This patch removes the dead uncompiled code in usbip_common.c + +Signed-off-by: Himanshu Chauhan <himanshu@symmetricore.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/usbip/usbip_common.c | 54 ----------------------------------- + 1 file changed, 54 deletions(-) + +--- a/drivers/staging/usbip/usbip_common.c ++++ b/drivers/staging/usbip/usbip_common.c +@@ -530,60 +530,6 @@ err: + } + EXPORT_SYMBOL_GPL(usbip_xmit); + +- +-/* now a usrland utility should set options. */ +-#if 0 +-int setquickack(struct socket *socket) +-{ +- mm_segment_t oldfs; +- int val = 1; +- int ret; +- +- oldfs = get_fs(); +- set_fs(get_ds()); +- ret = socket->ops->setsockopt(socket, SOL_TCP, TCP_QUICKACK, +- (char __user *) &val, sizeof(ret)); +- set_fs(oldfs); +- +- return ret; +-} +- +-int setnodelay(struct socket *socket) +-{ +- mm_segment_t oldfs; +- int val = 1; +- int ret; +- +- oldfs = get_fs(); +- set_fs(get_ds()); +- ret = socket->ops->setsockopt(socket, SOL_TCP, TCP_NODELAY, +- (char __user *) &val, sizeof(ret)); +- set_fs(oldfs); +- +- return ret; +-} +- +-int setkeepalive(struct socket *socket) +-{ +- mm_segment_t oldfs; +- int val = 1; +- int ret; +- +- oldfs = get_fs(); +- set_fs(get_ds()); +- ret = socket->ops->setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, +- (char __user *) &val, sizeof(ret)); +- set_fs(oldfs); +- +- return ret; +-} +- +-void setreuse(struct socket *socket) +-{ +- socket->sk->sk_reuse = 1; +-} +-#endif +- + struct socket *sockfd_to_socket(unsigned int sockfd) + { + struct socket *socket; diff --git a/staging/staging-usbip-minor-code-cleanup.patch b/staging/staging-usbip-minor-code-cleanup.patch new file mode 100644 index 00000000000000..f75f08823751ee --- /dev/null +++ b/staging/staging-usbip-minor-code-cleanup.patch @@ -0,0 +1,32 @@ +From himanshu@symmetricore.com Wed Jan 27 18:25:46 2010 +From: Himanshu Chauhan <himanshu@symmetricore.com> +Date: Sat, 23 Jan 2010 01:51:57 +0530 +Subject: Staging: usbip: minor code cleanup +To: greg@kroah.com +Cc: Himanshu Chauhan <Himanshu@symmetricore.com>, Himanshu Chauhan <himanshu@symmetricore.com> +Message-ID: <1264191718-12481-2-git-send-email-himanshu@symmetricore.com> + + +From: Himanshu Chauhan <Himanshu@symmetricore.com> + +Signed-off-by: Himanshu Chauhan <himanshu@symmetricore.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/usbip/usbip_common.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +--- a/drivers/staging/usbip/usbip_common.c ++++ b/drivers/staging/usbip/usbip_common.c +@@ -55,10 +55,7 @@ static ssize_t show_flag(struct device * + static ssize_t store_flag(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) + { +- unsigned long flag; +- +- sscanf(buf, "%lx", &flag); +- usbip_debug_flag = flag; ++ sscanf(buf, "%lx", &usbip_debug_flag); + + return count; + } diff --git a/staging/staging-usbip-seperate-usbip-config-debug-from-config_usb_debug.patch b/staging/staging-usbip-seperate-usbip-config-debug-from-config_usb_debug.patch new file mode 100644 index 00000000000000..58231be8feb4d4 --- /dev/null +++ b/staging/staging-usbip-seperate-usbip-config-debug-from-config_usb_debug.patch @@ -0,0 +1,83 @@ +From himanshu@symmetricore.com Wed Jan 27 18:28:09 2010 +From: Himanshu <himanshu@symmetricore.com> +Date: Sat, 23 Jan 2010 17:52:02 +0530 +Subject: Staging: usbip: Seperate usbip config debug from CONFIG_USB_DEBUG +To: greg@kroah.com +Message-ID: <1264249322-4268-1-git-send-email-himanshu@symmetricore.com> + + +Signed-off-by: Himanshu <himanshu@symmetricore.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/usbip/Kconfig | 7 +++++++ + drivers/staging/usbip/Makefile | 2 +- + drivers/staging/usbip/usbip_common.c | 2 +- + drivers/staging/usbip/usbip_common.h | 8 ++++---- + 4 files changed, 13 insertions(+), 6 deletions(-) + +--- a/drivers/staging/usbip/Kconfig ++++ b/drivers/staging/usbip/Kconfig +@@ -34,3 +34,10 @@ config USB_IP_HOST + + To compile this driver as a module, choose M here: the + module will be called usbip. ++ ++config USB_IP_DEBUG_ENABLE ++ bool "USB-IP Debug Enable" ++ depends on USB_IP_COMMON ++ default N ++ ---help--- ++ This enables the debug messages from the USB-IP drivers. +--- a/drivers/staging/usbip/Makefile ++++ b/drivers/staging/usbip/Makefile +@@ -7,6 +7,6 @@ vhci-hcd-objs := vhci_sysfs.o vhci_tx.o + obj-$(CONFIG_USB_IP_HOST) += usbip.o + usbip-objs := stub_dev.o stub_main.o stub_rx.o stub_tx.o + +-ifeq ($(CONFIG_USB_DEBUG),y) ++ifeq ($(CONFIG_USB_IP_DEBUG_ENABLE),y) + EXTRA_CFLAGS += -DDEBUG + endif +--- a/drivers/staging/usbip/usbip_common.c ++++ b/drivers/staging/usbip/usbip_common.c +@@ -33,7 +33,7 @@ + /*-------------------------------------------------------------------------*/ + /* debug routines */ + +-#ifdef CONFIG_USB_DEBUG ++#ifdef CONFIG_USB_IP_DEBUG_ENABLE + unsigned long usbip_debug_flag = 0xffffffff; + #else + unsigned long usbip_debug_flag; +--- a/drivers/staging/usbip/usbip_common.h ++++ b/drivers/staging/usbip/usbip_common.h +@@ -33,12 +33,12 @@ + */ + + /** +- * usbip_udbg - print debug messages if CONFIG_USB_DEBUG is defined ++ * usbip_udbg - print debug messages if CONFIG_USB_IP_DEBUG_ENABLE is defined + * @fmt: + * @args: + */ + +-#ifdef CONFIG_USB_DEBUG ++#ifdef CONFIG_USB_IP_DEBUG_ENABLE + + #define usbip_udbg(fmt, args...) \ + do { \ +@@ -47,11 +47,11 @@ + __FILE__, __LINE__, __func__, ##args); \ + } while (0) + +-#else /* CONFIG_USB_DEBUG */ ++#else /* CONFIG_USB_IP_DEBUG_ENABLE */ + + #define usbip_udbg(fmt, args...) do { } while (0) + +-#endif /* CONFIG_USB_DEBUG */ ++#endif /* CONFIG_USB_IP_DEBUG_ENABLE */ + + + enum { diff --git a/staging/staging-usbip-use-print_hex_dump-instead-of-open-coding-it.patch b/staging/staging-usbip-use-print_hex_dump-instead-of-open-coding-it.patch new file mode 100644 index 00000000000000..97552262167123 --- /dev/null +++ b/staging/staging-usbip-use-print_hex_dump-instead-of-open-coding-it.patch @@ -0,0 +1,54 @@ +From himanshu@symmetricore.com Wed Jan 27 18:26:28 2010 +From: Himanshu Chauhan <himanshu@symmetricore.com> +Date: Sat, 23 Jan 2010 02:52:41 +0530 +Subject: Staging: usbip: use print_hex_dump() instead of open coding it. +To: greg@kroah.com +Cc: Himanshu Chauhan <himanshu@symmetricore.com> +Message-ID: <1264195361-16445-1-git-send-email-himanshu@symmetricore.com> + + +Signed-off-by: Himanshu Chauhan <himanshu@symmetricore.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/usbip/usbip_common.c | 29 ++--------------------------- + 1 file changed, 2 insertions(+), 27 deletions(-) + +--- a/drivers/staging/usbip/usbip_common.c ++++ b/drivers/staging/usbip/usbip_common.c +@@ -63,33 +63,8 @@ DEVICE_ATTR(usbip_debug, (S_IRUGO | S_IW + + static void usbip_dump_buffer(char *buff, int bufflen) + { +- int i; +- +- if (bufflen > 128) { +- for (i = 0; i < 128; i++) { +- if (i%24 == 0) +- printk(KERN_DEBUG " "); +- printk(KERN_DEBUG "%02x ", (unsigned char) buff[i]); +- if (i%4 == 3) +- printk(KERN_DEBUG "| "); +- if (i%24 == 23) +- printk(KERN_DEBUG "\n"); +- } +- printk(KERN_DEBUG "... (%d byte)\n", bufflen); +- return; +- } +- +- for (i = 0; i < bufflen; i++) { +- if (i%24 == 0) +- printk(KERN_DEBUG " "); +- printk(KERN_DEBUG "%02x ", (unsigned char) buff[i]); +- if (i%4 == 3) +- printk(KERN_DEBUG "| "); +- if (i%24 == 23) +- printk(KERN_DEBUG "\n"); +- } +- printk(KERN_DEBUG "\n"); +- ++ print_hex_dump(KERN_DEBUG, "usb-ip", DUMP_PREFIX_OFFSET, 16, 4, ++ buff, bufflen, false); + } + + static void usbip_dump_pipe(unsigned int p) diff --git a/usb.current/usb-g_multi-fix-config_usb_g_multi_rndis-usage.patch b/usb.current/usb-g_multi-fix-config_usb_g_multi_rndis-usage.patch new file mode 100644 index 00000000000000..0776793fd138dc --- /dev/null +++ b/usb.current/usb-g_multi-fix-config_usb_g_multi_rndis-usage.patch @@ -0,0 +1,34 @@ +From m.nazarewicz@samsung.com Wed Jan 27 18:18:07 2010 +From: Michal Nazarewicz <m.nazarewicz@samsung.com> +Date: Fri, 22 Jan 2010 15:18:21 +0100 +Subject: USB: g_multi: fix CONFIG_USB_G_MULTI_RNDIS usage +To: Randy Dunlap <randy.dunlap@oracle.com>, Stephen Rothwell <sfr@canb.auug.org.au>, Greg KH <greg@kroah.com>, Randy Dunlap <randy.dunlap@oracle.com>, Stephen Rothwell <sfr@canb.auug.org.au>, Greg KH <greg@kroah.com> +Cc: Michal Nazarewicz <m.nazarewicz@samsung.com>, linux-next@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Szyprowski <m.szyprowski@samsung.com>, Kyungmin Park <kyungmin.park@samsung.com> +Message-ID: <1264169901-12475-1-git-send-email-m.nazarewicz@samsung.com> + + +g_multi used CONFIG_USB_ETH_RNDIS to check if RNDIS option was requested +where it should check for CONFIG_USB_G_MULTI_RNDIS. As a result, RNDIS +was never present in g_multi regardless of configuration. + +This fixes changes made in commit 396cda90d228d0851f3d64c7c85a1ecf6b8ae1e8. + +Signed-off-by: Michal Nazarewicz <m.nazarewicz@samsung.com> +Cc: Marek Szyprowski <m.szyprowski@samsung.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/multi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/gadget/multi.c ++++ b/drivers/usb/gadget/multi.c +@@ -29,7 +29,7 @@ + #if defined USB_ETH_RNDIS + # undef USB_ETH_RNDIS + #endif +-#ifdef CONFIG_USB_ETH_RNDIS ++#ifdef CONFIG_USB_G_MULTI_RNDIS + # define USB_ETH_RNDIS y + #endif + diff --git a/usb.current/usb-otg-kconfig-let-usb_otg_utils-select-usb_ulpi-option.patch b/usb.current/usb-otg-kconfig-let-usb_otg_utils-select-usb_ulpi-option.patch new file mode 100644 index 00000000000000..d7c3b81b2528a2 --- /dev/null +++ b/usb.current/usb-otg-kconfig-let-usb_otg_utils-select-usb_ulpi-option.patch @@ -0,0 +1,41 @@ +From valentin.longchamp@epfl.ch Wed Jan 27 18:24:25 2010 +From: Valentin Longchamp <valentin.longchamp@epfl.ch> +Date: Wed, 20 Jan 2010 20:06:31 +0100 +Subject: USB: otg Kconfig: let USB_OTG_UTILS select USB_ULPI option +To: s.hauer@pengutronix.de, u.kleine-koenig@pengutronix.de, daniel@caiaq.de +Cc: linux-arm-kernel@lists.infradead.org, linux-usb@vger.kernel.org, Valentin Longchamp <valentin.longchamp@epfl.ch> +Message-ID: <1264014391-11521-1-git-send-email-valentin.longchamp@epfl.ch> + + +With CONFIG_USB_ULPI=y, CONFIG_USB<=m, CONFIG_PCI=n and +CONFIG_USB_OTG_UTILS=n, which is the default used for mx31moboard, +the build for all mx3 platforms fails because drivers/usb/otg/ulpi.c +where otg_ulpi_create is defined is not compiled. + +Build error: +arch/arm/mach-mx3/built-in.o: In function `mxc_board_init': +kzmarm11.c:(.init.text+0x73c): undefined reference to `otg_ulpi_create' +kzmarm11.c:(.init.text+0x1020): undefined reference to `otg_ulpi_create' + +This isn't a strong dependency as drivers/usb/otg/ulpi.c doesn't +use functions defined in drivers/usb/otg/otg.o and is only needed +to get ulpi.o linked into the kernel image. + +Signed-off-by: Valentin Longchamp <valentin.longchamp@epfl.ch> +Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/otg/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/otg/Kconfig ++++ b/drivers/usb/otg/Kconfig +@@ -44,6 +44,7 @@ config ISP1301_OMAP + config USB_ULPI + bool "Generic ULPI Transceiver Driver" + depends on ARM ++ select USB_OTG_UTILS + help + Enable this to support ULPI connected USB OTG transceivers which + are likely found on embedded boards. diff --git a/usb/usb-musb-add-context-save-and-restore-support.patch b/usb/usb-musb-add-context-save-and-restore-support.patch new file mode 100644 index 00000000000000..aa002981403966 --- /dev/null +++ b/usb/usb-musb-add-context-save-and-restore-support.patch @@ -0,0 +1,397 @@ +From felipe.balbi@nokia.com Wed Jan 27 18:19:15 2010 +From: Ajay Kumar Gupta <ajay.gupta@ti.com> +Date: Thu, 21 Jan 2010 15:33:52 +0200 +Subject: usb: musb: Add context save and restore support +To: Greg KH <greg@kroah.com> +Cc: Ajay Kumar Gupta <ajay.gupta@ti.com>, Anand Gadiyar <gadiyar@ti.com>, Felipe Balbi <felipe.balbi@nokia.com> +Message-ID: <1264080838-9452-2-git-send-email-felipe.balbi@nokia.com> + + +From: Ajay Kumar Gupta <ajay.gupta@ti.com> + +Adding support for MUSB register save and restore during system +suspend and resume. + +Changes: + - Added musb_save/restore_context() functions + - Added platform specific musb_platform_save/restore_context() + to handle platform specific jobs. + - Maintaining BlackFin compatibility by adding read/write + functions for registers which are not available in BlackFin + +Tested system suspend and resume on OMAP3EVM board. + +Signed-off-by: Anand Gadiyar <gadiyar@ti.com> +Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com> +Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/musb/musb_core.c | 146 +++++++++++++++++++++++++++++++++++++++++++ + drivers/usb/musb/musb_core.h | 39 +++++++++++ + drivers/usb/musb/musb_regs.h | 90 ++++++++++++++++++++++++++ + drivers/usb/musb/omap2430.c | 16 ++++ + 4 files changed, 291 insertions(+) + +--- a/drivers/usb/musb/musb_core.c ++++ b/drivers/usb/musb/musb_core.c +@@ -2167,6 +2167,148 @@ static int __exit musb_remove(struct pla + + #ifdef CONFIG_PM + ++static struct musb_context_registers musb_context; ++ ++void musb_save_context(struct musb *musb) ++{ ++ int i; ++ void __iomem *musb_base = musb->mregs; ++ ++ if (is_host_enabled(musb)) { ++ musb_context.frame = musb_readw(musb_base, MUSB_FRAME); ++ musb_context.testmode = musb_readb(musb_base, MUSB_TESTMODE); ++ } ++ musb_context.power = musb_readb(musb_base, MUSB_POWER); ++ musb_context.intrtxe = musb_readw(musb_base, MUSB_INTRTXE); ++ musb_context.intrrxe = musb_readw(musb_base, MUSB_INTRRXE); ++ musb_context.intrusbe = musb_readb(musb_base, MUSB_INTRUSBE); ++ musb_context.index = musb_readb(musb_base, MUSB_INDEX); ++ musb_context.devctl = musb_readb(musb_base, MUSB_DEVCTL); ++ ++ for (i = 0; i < MUSB_C_NUM_EPS; ++i) { ++ musb_writeb(musb_base, MUSB_INDEX, i); ++ musb_context.index_regs[i].txmaxp = ++ musb_readw(musb_base, 0x10 + MUSB_TXMAXP); ++ musb_context.index_regs[i].txcsr = ++ musb_readw(musb_base, 0x10 + MUSB_TXCSR); ++ musb_context.index_regs[i].rxmaxp = ++ musb_readw(musb_base, 0x10 + MUSB_RXMAXP); ++ musb_context.index_regs[i].rxcsr = ++ musb_readw(musb_base, 0x10 + MUSB_RXCSR); ++ ++ if (musb->dyn_fifo) { ++ musb_context.index_regs[i].txfifoadd = ++ musb_read_txfifoadd(musb_base); ++ musb_context.index_regs[i].rxfifoadd = ++ musb_read_rxfifoadd(musb_base); ++ musb_context.index_regs[i].txfifosz = ++ musb_read_txfifosz(musb_base); ++ musb_context.index_regs[i].rxfifosz = ++ musb_read_rxfifosz(musb_base); ++ } ++ if (is_host_enabled(musb)) { ++ musb_context.index_regs[i].txtype = ++ musb_readb(musb_base, 0x10 + MUSB_TXTYPE); ++ musb_context.index_regs[i].txinterval = ++ musb_readb(musb_base, 0x10 + MUSB_TXINTERVAL); ++ musb_context.index_regs[i].rxtype = ++ musb_readb(musb_base, 0x10 + MUSB_RXTYPE); ++ musb_context.index_regs[i].rxinterval = ++ musb_readb(musb_base, 0x10 + MUSB_RXINTERVAL); ++ ++ musb_context.index_regs[i].txfunaddr = ++ musb_read_txfunaddr(musb_base, i); ++ musb_context.index_regs[i].txhubaddr = ++ musb_read_txhubaddr(musb_base, i); ++ musb_context.index_regs[i].txhubport = ++ musb_read_txhubport(musb_base, i); ++ ++ musb_context.index_regs[i].rxfunaddr = ++ musb_read_rxfunaddr(musb_base, i); ++ musb_context.index_regs[i].rxhubaddr = ++ musb_read_rxhubaddr(musb_base, i); ++ musb_context.index_regs[i].rxhubport = ++ musb_read_rxhubport(musb_base, i); ++ } ++ } ++ ++ musb_writeb(musb_base, MUSB_INDEX, musb_context.index); ++ ++ musb_platform_save_context(&musb_context); ++} ++ ++void musb_restore_context(struct musb *musb) ++{ ++ int i; ++ void __iomem *musb_base = musb->mregs; ++ void __iomem *ep_target_regs; ++ ++ musb_platform_restore_context(&musb_context); ++ ++ if (is_host_enabled(musb)) { ++ musb_writew(musb_base, MUSB_FRAME, musb_context.frame); ++ musb_writeb(musb_base, MUSB_TESTMODE, musb_context.testmode); ++ } ++ musb_writeb(musb_base, MUSB_POWER, musb_context.power); ++ musb_writew(musb_base, MUSB_INTRTXE, musb_context.intrtxe); ++ musb_writew(musb_base, MUSB_INTRRXE, musb_context.intrrxe); ++ musb_writeb(musb_base, MUSB_INTRUSBE, musb_context.intrusbe); ++ musb_writeb(musb_base, MUSB_DEVCTL, musb_context.devctl); ++ ++ for (i = 0; i < MUSB_C_NUM_EPS; ++i) { ++ musb_writeb(musb_base, MUSB_INDEX, i); ++ musb_writew(musb_base, 0x10 + MUSB_TXMAXP, ++ musb_context.index_regs[i].txmaxp); ++ musb_writew(musb_base, 0x10 + MUSB_TXCSR, ++ musb_context.index_regs[i].txcsr); ++ musb_writew(musb_base, 0x10 + MUSB_RXMAXP, ++ musb_context.index_regs[i].rxmaxp); ++ musb_writew(musb_base, 0x10 + MUSB_RXCSR, ++ musb_context.index_regs[i].rxcsr); ++ ++ if (musb->dyn_fifo) { ++ musb_write_txfifosz(musb_base, ++ musb_context.index_regs[i].txfifosz); ++ musb_write_rxfifosz(musb_base, ++ musb_context.index_regs[i].rxfifosz); ++ musb_write_txfifoadd(musb_base, ++ musb_context.index_regs[i].txfifoadd); ++ musb_write_rxfifoadd(musb_base, ++ musb_context.index_regs[i].rxfifoadd); ++ } ++ ++ if (is_host_enabled(musb)) { ++ musb_writeb(musb_base, 0x10 + MUSB_TXTYPE, ++ musb_context.index_regs[i].txtype); ++ musb_writeb(musb_base, 0x10 + MUSB_TXINTERVAL, ++ musb_context.index_regs[i].txinterval); ++ musb_writeb(musb_base, 0x10 + MUSB_RXTYPE, ++ musb_context.index_regs[i].rxtype); ++ musb_writeb(musb_base, 0x10 + MUSB_RXINTERVAL, ++ ++ musb_context.index_regs[i].rxinterval); ++ musb_write_txfunaddr(musb_base, i, ++ musb_context.index_regs[i].txfunaddr); ++ musb_write_txhubaddr(musb_base, i, ++ musb_context.index_regs[i].txhubaddr); ++ musb_write_txhubport(musb_base, i, ++ musb_context.index_regs[i].txhubport); ++ ++ ep_target_regs = ++ musb_read_target_reg_base(i, musb_base); ++ ++ musb_write_rxfunaddr(ep_target_regs, ++ musb_context.index_regs[i].rxfunaddr); ++ musb_write_rxhubaddr(ep_target_regs, ++ musb_context.index_regs[i].rxhubaddr); ++ musb_write_rxhubport(ep_target_regs, ++ musb_context.index_regs[i].rxhubport); ++ } ++ } ++ ++ musb_writeb(musb_base, MUSB_INDEX, musb_context.index); ++} ++ + static int musb_suspend(struct device *dev) + { + struct platform_device *pdev = to_platform_device(dev); +@@ -2188,6 +2330,8 @@ static int musb_suspend(struct device *d + */ + } + ++ musb_save_context(musb); ++ + if (musb->set_clock) + musb->set_clock(musb->clock, 0); + else +@@ -2209,6 +2353,8 @@ static int musb_resume_noirq(struct devi + else + clk_enable(musb->clock); + ++ musb_restore_context(musb); ++ + /* for static cmos like DaVinci, register values were preserved + * unless for some reason the whole soc powered down or the USB + * module got reset through the PSC (vs just being disabled). +--- a/drivers/usb/musb/musb_core.h ++++ b/drivers/usb/musb/musb_core.h +@@ -454,6 +454,45 @@ struct musb { + #endif + }; + ++#ifdef CONFIG_PM ++struct musb_csr_regs { ++ /* FIFO registers */ ++ u16 txmaxp, txcsr, rxmaxp, rxcsr; ++ u16 rxfifoadd, txfifoadd; ++ u8 txtype, txinterval, rxtype, rxinterval; ++ u8 rxfifosz, txfifosz; ++ u8 txfunaddr, txhubaddr, txhubport; ++ u8 rxfunaddr, rxhubaddr, rxhubport; ++}; ++ ++struct musb_context_registers { ++ ++#if defined(CONFIG_ARCH_OMAP34XX) || defined(CONFIG_ARCH_OMAP2430) ++ u32 otg_sysconfig, otg_forcestandby; ++#endif ++ u8 power; ++ u16 intrtxe, intrrxe; ++ u8 intrusbe; ++ u16 frame; ++ u8 index, testmode; ++ ++ u8 devctl, misc; ++ ++ struct musb_csr_regs index_regs[MUSB_C_NUM_EPS]; ++}; ++ ++#if defined(CONFIG_ARCH_OMAP34XX) || defined(CONFIG_ARCH_OMAP2430) ++extern void musb_platform_save_context(struct musb_context_registers ++ *musb_context); ++extern void musb_platform_restore_context(struct musb_context_registers ++ *musb_context); ++#else ++#define musb_platform_save_context(x) do {} while (0) ++#define musb_platform_restore_context(x) do {} while (0) ++#endif ++ ++#endif ++ + static inline void musb_set_vbus(struct musb *musb, int is_on) + { + musb->board_set_vbus(musb, is_on); +--- a/drivers/usb/musb/musb_regs.h ++++ b/drivers/usb/musb/musb_regs.h +@@ -326,6 +326,26 @@ static inline void musb_write_rxfifoadd + musb_writew(mbase, MUSB_RXFIFOADD, c_off); + } + ++static inline u8 musb_read_txfifosz(void __iomem *mbase) ++{ ++ return musb_readb(mbase, MUSB_TXFIFOSZ); ++} ++ ++static inline u16 musb_read_txfifoadd(void __iomem *mbase) ++{ ++ return musb_readw(mbase, MUSB_TXFIFOADD); ++} ++ ++static inline u8 musb_read_rxfifosz(void __iomem *mbase) ++{ ++ return musb_readb(mbase, MUSB_RXFIFOSZ); ++} ++ ++static inline u16 musb_read_rxfifoadd(void __iomem *mbase) ++{ ++ return musb_readw(mbase, MUSB_RXFIFOADD); ++} ++ + static inline u8 musb_read_configdata(void __iomem *mbase) + { + musb_writeb(mbase, MUSB_INDEX, 0); +@@ -381,6 +401,36 @@ static inline void musb_write_txhubport + qh_h_port_reg); + } + ++static inline u8 musb_read_rxfunaddr(void __iomem *mbase, u8 epnum) ++{ ++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_RXFUNCADDR)); ++} ++ ++static inline u8 musb_read_rxhubaddr(void __iomem *mbase, u8 epnum) ++{ ++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_RXHUBADDR)); ++} ++ ++static inline u8 musb_read_rxhubport(void __iomem *mbase, u8 epnum) ++{ ++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_RXHUBPORT)); ++} ++ ++static inline u8 musb_read_txfunaddr(void __iomem *mbase, u8 epnum) ++{ ++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_TXFUNCADDR)); ++} ++ ++static inline u8 musb_read_txhubaddr(void __iomem *mbase, u8 epnum) ++{ ++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_TXHUBADDR)); ++} ++ ++static inline u8 musb_read_txhubport(void __iomem *mbase, u8 epnum) ++{ ++ return musb_readb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_TXHUBPORT)); ++} ++ + #else /* CONFIG_BLACKFIN */ + + #define USB_BASE USB_FADDR +@@ -460,6 +510,22 @@ static inline void musb_write_rxfifoadd + { + } + ++static inline u8 musb_read_txfifosz(void __iomem *mbase) ++{ ++} ++ ++static inline u16 musb_read_txfifoadd(void __iomem *mbase) ++{ ++} ++ ++static inline u8 musb_read_rxfifosz(void __iomem *mbase) ++{ ++} ++ ++static inline u16 musb_read_rxfifoadd(void __iomem *mbase) ++{ ++} ++ + static inline u8 musb_read_configdata(void __iomem *mbase) + { + return 0; +@@ -505,6 +571,30 @@ static inline void musb_write_txhubport + { + } + ++static inline u8 musb_read_rxfunaddr(void __iomem *mbase, u8 epnum) ++{ ++} ++ ++static inline u8 musb_read_rxhubaddr(void __iomem *mbase, u8 epnum) ++{ ++} ++ ++static inline u8 musb_read_rxhubport(void __iomem *mbase, u8 epnum) ++{ ++} ++ ++static inline u8 musb_read_txfunaddr(void __iomem *mbase, u8 epnum) ++{ ++} ++ ++static inline u8 musb_read_txhubaddr(void __iomem *mbase, u8 epnum) ++{ ++} ++ ++static inline void musb_read_txhubport(void __iomem *mbase, u8 epnum) ++{ ++} ++ + #endif /* CONFIG_BLACKFIN */ + + #endif /* __MUSB_REGS_H__ */ +--- a/drivers/usb/musb/omap2430.c ++++ b/drivers/usb/musb/omap2430.c +@@ -255,6 +255,22 @@ int __init musb_platform_init(struct mus + return 0; + } + ++#ifdef CONFIG_PM ++void musb_platform_save_context(struct musb_context_registers ++ *musb_context) ++{ ++ musb_context->otg_sysconfig = omap_readl(OTG_SYSCONFIG); ++ musb_context->otg_forcestandby = omap_readl(OTG_FORCESTDBY); ++} ++ ++void musb_platform_restore_context(struct musb_context_registers ++ *musb_context) ++{ ++ omap_writel(musb_context->otg_sysconfig, OTG_SYSCONFIG); ++ omap_writel(musb_context->otg_forcestandby, OTG_FORCESTDBY); ++} ++#endif ++ + int musb_platform_suspend(struct musb *musb) + { + u32 l; diff --git a/usb/usb-musb-deprecate-what-we-don-t-use.patch b/usb/usb-musb-deprecate-what-we-don-t-use.patch new file mode 100644 index 00000000000000..b60968c75b7c5b --- /dev/null +++ b/usb/usb-musb-deprecate-what-we-don-t-use.patch @@ -0,0 +1,58 @@ +From felipe.balbi@nokia.com Wed Jan 27 18:21:16 2010 +From: Felipe Balbi <felipe.balbi@nokia.com> +Date: Thu, 21 Jan 2010 15:33:55 +0200 +Subject: USB: musb: deprecate what we don't use +To: Greg KH <greg@kroah.com> +Message-ID: <1264080838-9452-5-git-send-email-felipe.balbi@nokia.com> + + +after 2.6.34, those fields will be removed from +struct musb_hdrc_platform_data, it's expected +that other architectures are fixed by then. + +Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + include/linux/usb/musb.h | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +--- a/include/linux/usb/musb.h ++++ b/include/linux/usb/musb.h +@@ -30,26 +30,26 @@ struct musb_hdrc_eps_bits { + struct musb_hdrc_config { + /* MUSB configuration-specific details */ + unsigned multipoint:1; /* multipoint device */ +- unsigned dyn_fifo:1; /* supports dynamic fifo sizing */ +- unsigned soft_con:1; /* soft connect required */ +- unsigned utm_16:1; /* utm data witdh is 16 bits */ ++ unsigned dyn_fifo:1 __deprecated; /* supports dynamic fifo sizing */ ++ unsigned soft_con:1 __deprecated; /* soft connect required */ ++ unsigned utm_16:1 __deprecated; /* utm data witdh is 16 bits */ + unsigned big_endian:1; /* true if CPU uses big-endian */ + unsigned mult_bulk_tx:1; /* Tx ep required for multbulk pkts */ + unsigned mult_bulk_rx:1; /* Rx ep required for multbulk pkts */ + unsigned high_iso_tx:1; /* Tx ep required for HB iso */ + unsigned high_iso_rx:1; /* Rx ep required for HD iso */ +- unsigned dma:1; /* supports DMA */ +- unsigned vendor_req:1; /* vendor registers required */ ++ unsigned dma:1 __deprecated; /* supports DMA */ ++ unsigned vendor_req:1 __deprecated; /* vendor registers required */ + + u8 num_eps; /* number of endpoints _with_ ep0 */ +- u8 dma_channels; /* number of dma channels */ ++ u8 dma_channels __deprecated; /* number of dma channels */ + u8 dyn_fifo_size; /* dynamic size in bytes */ +- u8 vendor_ctrl; /* vendor control reg width */ +- u8 vendor_stat; /* vendor status reg witdh */ +- u8 dma_req_chan; /* bitmask for required dma channels */ ++ u8 vendor_ctrl __deprecated; /* vendor control reg width */ ++ u8 vendor_stat __deprecated; /* vendor status reg witdh */ ++ u8 dma_req_chan __deprecated; /* bitmask for required dma channels */ + u8 ram_bits; /* ram address size */ + +- struct musb_hdrc_eps_bits *eps_bits; ++ struct musb_hdrc_eps_bits *eps_bits __deprecated; + #ifdef CONFIG_BLACKFIN + /* A GPIO controlling VRSEL in Blackfin */ + unsigned int gpio_vrsel; diff --git a/usb/usb-musb-get-rid-of-omap_readl-writel.patch b/usb/usb-musb-get-rid-of-omap_readl-writel.patch new file mode 100644 index 00000000000000..dca6ce46ba4256 --- /dev/null +++ b/usb/usb-musb-get-rid-of-omap_readl-writel.patch @@ -0,0 +1,227 @@ +From felipe.balbi@nokia.com Wed Jan 27 18:19:46 2010 +From: Felipe Balbi <felipe.balbi@nokia.com> +Date: Thu, 21 Jan 2010 15:33:53 +0200 +Subject: USB: musb: get rid of omap_readl/writel +To: Greg KH <greg@kroah.com> +Message-ID: <1264080838-9452-3-git-send-email-felipe.balbi@nokia.com> + + +we have those addresses already ioremaped, so let's +use our __raw_readl/writel wrappers. + +Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/musb/musb_core.c | 4 +-- + drivers/usb/musb/musb_core.h | 12 +++++----- + drivers/usb/musb/omap2430.c | 48 ++++++++++++++++++++++--------------------- + drivers/usb/musb/omap2430.h | 32 ++++++++++++---------------- + 4 files changed, 47 insertions(+), 49 deletions(-) + +--- a/drivers/usb/musb/musb_core.c ++++ b/drivers/usb/musb/musb_core.c +@@ -2234,7 +2234,7 @@ void musb_save_context(struct musb *musb + + musb_writeb(musb_base, MUSB_INDEX, musb_context.index); + +- musb_platform_save_context(&musb_context); ++ musb_platform_save_context(musb, &musb_context); + } + + void musb_restore_context(struct musb *musb) +@@ -2243,7 +2243,7 @@ void musb_restore_context(struct musb *m + void __iomem *musb_base = musb->mregs; + void __iomem *ep_target_regs; + +- musb_platform_restore_context(&musb_context); ++ musb_platform_restore_context(musb, &musb_context); + + if (is_host_enabled(musb)) { + musb_writew(musb_base, MUSB_FRAME, musb_context.frame); +--- a/drivers/usb/musb/musb_core.h ++++ b/drivers/usb/musb/musb_core.h +@@ -482,13 +482,13 @@ struct musb_context_registers { + }; + + #if defined(CONFIG_ARCH_OMAP34XX) || defined(CONFIG_ARCH_OMAP2430) +-extern void musb_platform_save_context(struct musb_context_registers +- *musb_context); +-extern void musb_platform_restore_context(struct musb_context_registers +- *musb_context); ++extern void musb_platform_save_context(struct musb *musb, ++ struct musb_context_registers *musb_context); ++extern void musb_platform_restore_context(struct musb *musb, ++ struct musb_context_registers *musb_context); + #else +-#define musb_platform_save_context(x) do {} while (0) +-#define musb_platform_restore_context(x) do {} while (0) ++#define musb_platform_save_context(m, x) do {} while (0) ++#define musb_platform_restore_context(m, x) do {} while (0) + #endif + + #endif +--- a/drivers/usb/musb/omap2430.c ++++ b/drivers/usb/musb/omap2430.c +@@ -220,7 +220,7 @@ int __init musb_platform_init(struct mus + + musb_platform_resume(musb); + +- l = omap_readl(OTG_SYSCONFIG); ++ l = musb_readl(musb->mregs, OTG_SYSCONFIG); + l &= ~ENABLEWAKEUP; /* disable wakeup */ + l &= ~NOSTDBY; /* remove possible nostdby */ + l |= SMARTSTDBY; /* enable smart standby */ +@@ -233,17 +233,19 @@ int __init musb_platform_init(struct mus + */ + if (!cpu_is_omap3430()) + l |= AUTOIDLE; /* enable auto idle */ +- omap_writel(l, OTG_SYSCONFIG); ++ musb_writel(musb->mregs, OTG_SYSCONFIG, l); + +- l = omap_readl(OTG_INTERFSEL); ++ l = musb_readl(musb->mregs, OTG_INTERFSEL); + l |= ULPI_12PIN; +- omap_writel(l, OTG_INTERFSEL); ++ musb_writel(musb->mregs, OTG_INTERFSEL, l); + + pr_debug("HS USB OTG: revision 0x%x, sysconfig 0x%02x, " + "sysstatus 0x%x, intrfsel 0x%x, simenable 0x%x\n", +- omap_readl(OTG_REVISION), omap_readl(OTG_SYSCONFIG), +- omap_readl(OTG_SYSSTATUS), omap_readl(OTG_INTERFSEL), +- omap_readl(OTG_SIMENABLE)); ++ musb_readl(musb->mregs, OTG_REVISION), ++ musb_readl(musb->mregs, OTG_SYSCONFIG), ++ musb_readl(musb->mregs, OTG_SYSSTATUS), ++ musb_readl(musb->mregs, OTG_INTERFSEL), ++ musb_readl(musb->mregs, OTG_SIMENABLE)); + + omap_vbus_power(musb, musb->board_mode == MUSB_HOST, 1); + +@@ -256,18 +258,18 @@ int __init musb_platform_init(struct mus + } + + #ifdef CONFIG_PM +-void musb_platform_save_context(struct musb_context_registers +- *musb_context) ++void musb_platform_save_context(struct musb *musb, ++ struct musb_context_registers *musb_context) + { +- musb_context->otg_sysconfig = omap_readl(OTG_SYSCONFIG); +- musb_context->otg_forcestandby = omap_readl(OTG_FORCESTDBY); ++ musb_context->otg_sysconfig = musb_readl(musb->mregs, OTG_SYSCONFIG); ++ musb_context->otg_forcestandby = musb_readl(musb->mregs, OTG_FORCESTDBY); + } + +-void musb_platform_restore_context(struct musb_context_registers +- *musb_context) ++void musb_platform_restore_context(struct musb *musb, ++ struct musb_context_registers *musb_context) + { +- omap_writel(musb_context->otg_sysconfig, OTG_SYSCONFIG); +- omap_writel(musb_context->otg_forcestandby, OTG_FORCESTDBY); ++ musb_writel(musb->mregs, OTG_SYSCONFIG, musb_context->otg_sysconfig); ++ musb_writel(musb->mregs, OTG_FORCESTDBY, musb_context->otg_forcestandby); + } + #endif + +@@ -279,13 +281,13 @@ int musb_platform_suspend(struct musb *m + return 0; + + /* in any role */ +- l = omap_readl(OTG_FORCESTDBY); ++ l = musb_readl(musb->mregs, OTG_FORCESTDBY); + l |= ENABLEFORCE; /* enable MSTANDBY */ +- omap_writel(l, OTG_FORCESTDBY); ++ musb_writel(musb->mregs, OTG_FORCESTDBY, l); + +- l = omap_readl(OTG_SYSCONFIG); ++ l = musb_readl(musb->mregs, OTG_SYSCONFIG); + l |= ENABLEWAKEUP; /* enable wakeup */ +- omap_writel(l, OTG_SYSCONFIG); ++ musb_writel(musb->mregs, OTG_SYSCONFIG, l); + + otg_set_suspend(musb->xceiv, 1); + +@@ -311,13 +313,13 @@ static int musb_platform_resume(struct m + else + clk_enable(musb->clock); + +- l = omap_readl(OTG_SYSCONFIG); ++ l = musb_readl(musb->mregs, OTG_SYSCONFIG); + l &= ~ENABLEWAKEUP; /* disable wakeup */ +- omap_writel(l, OTG_SYSCONFIG); ++ musb_writel(musb->mregs, OTG_SYSCONFIG, l); + +- l = omap_readl(OTG_FORCESTDBY); ++ l = musb_readl(musb->mregs, OTG_FORCESTDBY); + l &= ~ENABLEFORCE; /* disable MSTANDBY */ +- omap_writel(l, OTG_FORCESTDBY); ++ musb_writel(musb->mregs, OTG_FORCESTDBY, l); + + return 0; + } +--- a/drivers/usb/musb/omap2430.h ++++ b/drivers/usb/musb/omap2430.h +@@ -10,47 +10,43 @@ + #ifndef __MUSB_OMAP243X_H__ + #define __MUSB_OMAP243X_H__ + +-#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) +-#include <mach/hardware.h> + #include <plat/usb.h> + + /* + * OMAP2430-specific definitions + */ + +-#define MENTOR_BASE_OFFSET 0 +-#if defined(CONFIG_ARCH_OMAP2430) +-#define OMAP_HSOTG_BASE (OMAP243X_HS_BASE) +-#elif defined(CONFIG_ARCH_OMAP3430) +-#define OMAP_HSOTG_BASE (OMAP34XX_HSUSB_OTG_BASE) +-#endif +-#define OMAP_HSOTG(offset) (OMAP_HSOTG_BASE + 0x400 + (offset)) +-#define OTG_REVISION OMAP_HSOTG(0x0) +-#define OTG_SYSCONFIG OMAP_HSOTG(0x4) ++#define OTG_REVISION 0x400 ++ ++#define OTG_SYSCONFIG 0x404 + # define MIDLEMODE 12 /* bit position */ + # define FORCESTDBY (0 << MIDLEMODE) + # define NOSTDBY (1 << MIDLEMODE) + # define SMARTSTDBY (2 << MIDLEMODE) ++ + # define SIDLEMODE 3 /* bit position */ + # define FORCEIDLE (0 << SIDLEMODE) + # define NOIDLE (1 << SIDLEMODE) + # define SMARTIDLE (2 << SIDLEMODE) ++ + # define ENABLEWAKEUP (1 << 2) + # define SOFTRST (1 << 1) + # define AUTOIDLE (1 << 0) +-#define OTG_SYSSTATUS OMAP_HSOTG(0x8) ++ ++#define OTG_SYSSTATUS 0x408 + # define RESETDONE (1 << 0) +-#define OTG_INTERFSEL OMAP_HSOTG(0xc) ++ ++#define OTG_INTERFSEL 0x40c + # define EXTCP (1 << 2) +-# define PHYSEL 0 /* bit position */ ++# define PHYSEL 0 /* bit position */ + # define UTMI_8BIT (0 << PHYSEL) + # define ULPI_12PIN (1 << PHYSEL) + # define ULPI_8PIN (2 << PHYSEL) +-#define OTG_SIMENABLE OMAP_HSOTG(0x10) ++ ++#define OTG_SIMENABLE 0x410 + # define TM1 (1 << 0) +-#define OTG_FORCESTDBY OMAP_HSOTG(0x14) +-# define ENABLEFORCE (1 << 0) + +-#endif /* CONFIG_ARCH_OMAP2430 */ ++#define OTG_FORCESTDBY 0x414 ++# define ENABLEFORCE (1 << 0) + + #endif /* __MUSB_OMAP243X_H__ */ diff --git a/usb/usb-musb-only-print-info-message-if-probe-is-successful.patch b/usb/usb-musb-only-print-info-message-if-probe-is-successful.patch new file mode 100644 index 00000000000000..d532e27d1e5416 --- /dev/null +++ b/usb/usb-musb-only-print-info-message-if-probe-is-successful.patch @@ -0,0 +1,61 @@ +From felipe.balbi@nokia.com Wed Jan 27 18:22:54 2010 +From: Felipe Balbi <felipe.balbi@nokia.com> +Date: Thu, 21 Jan 2010 15:33:58 +0200 +Subject: USB: musb: only print info message if probe() is successful +To: Greg KH <greg@kroah.com> +Message-ID: <1264080838-9452-8-git-send-email-felipe.balbi@nokia.com> + + +we were printing the info about musb probe too early where +it was still possible for things to go wrong. Move the +down right before the return 0 statement. While at that +also convert pr_info to dev_info. + +Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/musb/musb_core.c | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +--- a/drivers/usb/musb/musb_core.c ++++ b/drivers/usb/musb/musb_core.c +@@ -2004,19 +2004,6 @@ bad_config: + musb->irq_wake = 0; + } + +- pr_info("%s: USB %s mode controller at %p using %s, IRQ %d\n", +- musb_driver_name, +- ({char *s; +- switch (musb->board_mode) { +- case MUSB_HOST: s = "Host"; break; +- case MUSB_PERIPHERAL: s = "Peripheral"; break; +- default: s = "OTG"; break; +- }; s; }), +- ctrl, +- (is_dma_capable() && musb->dma_controller) +- ? "DMA" : "PIO", +- musb->nIrq); +- + /* host side needs more setup */ + if (is_host_enabled(musb)) { + struct usb_hcd *hcd = musb_to_hcd(musb); +@@ -2079,6 +2066,18 @@ bad_config: + if (status) + goto fail2; + ++ dev_info(dev, "USB %s mode controller at %p using %s, IRQ %d\n", ++ ({char *s; ++ switch (musb->board_mode) { ++ case MUSB_HOST: s = "Host"; break; ++ case MUSB_PERIPHERAL: s = "Peripheral"; break; ++ default: s = "OTG"; break; ++ }; s; }), ++ ctrl, ++ (is_dma_capable() && musb->dma_controller) ++ ? "DMA" : "PIO", ++ musb->nIrq); ++ + return 0; + + fail2: diff --git a/usb/usb-musb-tusb6010-use-resource_size.patch b/usb/usb-musb-tusb6010-use-resource_size.patch new file mode 100644 index 00000000000000..d6812d8cec0b9b --- /dev/null +++ b/usb/usb-musb-tusb6010-use-resource_size.patch @@ -0,0 +1,28 @@ +From felipe.balbi@nokia.com Wed Jan 27 18:22:07 2010 +From: Felipe Balbi <felipe.balbi@nokia.com> +Date: Thu, 21 Jan 2010 15:33:56 +0200 +Subject: USB: musb: tusb6010: use resource_size +To: Greg KH <greg@kroah.com> +Message-ID: <1264080838-9452-6-git-send-email-felipe.balbi@nokia.com> + + +Trivial patch, no functional changes. + +Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/musb/tusb6010.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/musb/tusb6010.c ++++ b/drivers/usb/musb/tusb6010.c +@@ -1118,7 +1118,7 @@ int __init musb_platform_init(struct mus + } + musb->sync = mem->start; + +- sync = ioremap(mem->start, mem->end - mem->start + 1); ++ sync = ioremap(mem->start, resource_size(mem)); + if (!sync) { + pr_debug("ioremap for sync failed\n"); + ret = -ENOMEM; diff --git a/usb/usb-musb-unmap-base-if-we-can-t-probe.patch b/usb/usb-musb-unmap-base-if-we-can-t-probe.patch new file mode 100644 index 00000000000000..97250dd03094e1 --- /dev/null +++ b/usb/usb-musb-unmap-base-if-we-can-t-probe.patch @@ -0,0 +1,41 @@ +From felipe.balbi@nokia.com Wed Jan 27 18:22:39 2010 +From: Felipe Balbi <felipe.balbi@nokia.com> +Date: Thu, 21 Jan 2010 15:33:57 +0200 +Subject: USB: musb: unmap base if we can't probe +To: Greg KH <greg@kroah.com> +Message-ID: <1264080838-9452-7-git-send-email-felipe.balbi@nokia.com> + + +when probe() fails, we should iounmap() the mapped address. + +Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/musb/musb_core.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- a/drivers/usb/musb/musb_core.c ++++ b/drivers/usb/musb/musb_core.c +@@ -2110,6 +2110,7 @@ static int __init musb_probe(struct plat + { + struct device *dev = &pdev->dev; + int irq = platform_get_irq(pdev, 0); ++ int status; + struct resource *iomem; + void __iomem *base; + +@@ -2127,7 +2128,12 @@ static int __init musb_probe(struct plat + /* clobbered by use_dma=n */ + orig_dma_mask = dev->dma_mask; + #endif +- return musb_init_controller(dev, irq, base); ++ ++ status = musb_init_controller(dev, irq, base); ++ if (status < 0) ++ iounmap(base); ++ ++ return status; + } + + static int __exit musb_remove(struct platform_device *pdev) diff --git a/usb/usb-musb-we-already-tested-for-dyn_fifo.patch b/usb/usb-musb-we-already-tested-for-dyn_fifo.patch new file mode 100644 index 00000000000000..b6338af868b422 --- /dev/null +++ b/usb/usb-musb-we-already-tested-for-dyn_fifo.patch @@ -0,0 +1,46 @@ +From felipe.balbi@nokia.com Wed Jan 27 18:20:45 2010 +From: Felipe Balbi <felipe.balbi@nokia.com> +Date: Thu, 21 Jan 2010 15:33:54 +0200 +Subject: USB: musb: we already tested for dyn_fifo +To: Greg KH <greg@kroah.com> +Message-ID: <1264080838-9452-4-git-send-email-felipe.balbi@nokia.com> + + +... and even added a flag to struct musb, so let's +use that. + +Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/musb/musb_core.c | 19 ++++--------------- + 1 file changed, 4 insertions(+), 15 deletions(-) + +--- a/drivers/usb/musb/musb_core.c ++++ b/drivers/usb/musb/musb_core.c +@@ -1398,21 +1398,10 @@ static int __init musb_core_init(u16 mus + musb->nr_endpoints = 1; + musb->epmask = 1; + +- if (reg & MUSB_CONFIGDATA_DYNFIFO) { +- if (musb->config->dyn_fifo) +- status = ep_config_from_table(musb); +- else { +- ERR("reconfigure software for Dynamic FIFOs\n"); +- status = -ENODEV; +- } +- } else { +- if (!musb->config->dyn_fifo) +- status = ep_config_from_hw(musb); +- else { +- ERR("reconfigure software for static FIFOs\n"); +- return -ENODEV; +- } +- } ++ if (musb->dyn_fifo) ++ status = ep_config_from_table(musb); ++ else ++ status = ep_config_from_hw(musb); + + if (status < 0) + return status; diff --git a/usb/usb-s3c-hsotg-replace-deprecated-dma_sync_single.patch b/usb/usb-s3c-hsotg-replace-deprecated-dma_sync_single.patch new file mode 100644 index 00000000000000..4a0cdaa98f1ab5 --- /dev/null +++ b/usb/usb-s3c-hsotg-replace-deprecated-dma_sync_single.patch @@ -0,0 +1,56 @@ +From fujita.tomonori@lab.ntt.co.jp Wed Jan 27 18:29:57 2010 +From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> +Date: Mon, 25 Jan 2010 11:07:19 +0900 +Subject: USB: s3c-hsotg: replace deprecated dma_sync_single() +To: gregkh@suse.de +Cc: ben@simtec.co.uk, linux-usb@vger.kernel.org +Message-ID: <20100125110353F.fujita.tomonori@lab.ntt.co.jp> + + +This replaces deprecated dma_sync_single() with dma_sync_single_for_cpu(). + +There is no functional change because dma_sync_single() simply calls +dma_sync_single_for_cpu(): + +static inline void __deprecated dma_sync_single(struct device *dev, + dma_addr_t addr, size_t size, + enum dma_data_direction dir) +{ + dma_sync_single_for_cpu(dev, addr, size, dir); +} + +This fixes the following compile warnings: + +drivers/usb/gadget/s3c-hsotg.c: In function 's3c_hsotg_unmap_dma': +drivers/usb/gadget/s3c-hsotg.c:376: warning: 'dma_sync_single' is deprecated (declared at /home/fujita/git/linux-2.6/include/linux/dma-mapping.h:109) +drivers/usb/gadget/s3c-hsotg.c: In function 's3c_hsotg_map_dma': +drivers/usb/gadget/s3c-hsotg.c:758: warning: 'dma_sync_single' is deprecated (declared at /home/fujita/git/linux-2.6/include/linux/dma-mapping.h:109) + +Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> +Acked-by: Ben Dooks <ben@simtec.co.uk> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/s3c-hsotg.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/usb/gadget/s3c-hsotg.c ++++ b/drivers/usb/gadget/s3c-hsotg.c +@@ -374,7 +374,7 @@ static void s3c_hsotg_unmap_dma(struct s + req->dma = DMA_ADDR_INVALID; + hs_req->mapped = 0; + } else { +- dma_sync_single(hsotg->dev, req->dma, req->length, dir); ++ dma_sync_single_for_cpu(hsotg->dev, req->dma, req->length, dir); + } + } + +@@ -756,7 +756,7 @@ static int s3c_hsotg_map_dma(struct s3c_ + hs_req->mapped = 1; + req->dma = dma; + } else { +- dma_sync_single(hsotg->dev, req->dma, req->length, dir); ++ dma_sync_single_for_cpu(hsotg->dev, req->dma, req->length, dir); + hs_req->mapped = 0; + } + |
