Changeset 34561


Ignore:
Timestamp:
2012-12-06T23:40:49+01:00 (5 years ago)
Author:
florian
Message:

[adm8668] add support for on-board EHCI controller

Signed-off-by: Florian Fainelli <florian@…>

Location:
trunk/target/linux/adm8668/files/arch/mips
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/adm8668/files/arch/mips/adm8668/platform.c

    r34558 r34561  
    1414#include <linux/platform_device.h> 
    1515#include <linux/platform_data/tulip.h> 
     16#include <linux/usb/ehci_pdriver.h> 
    1617#include <linux/mtd/physmap.h> 
    1718#include <linux/mtd/partitions.h> 
     
    131132}; 
    132133 
     134static struct resource usb_resources[] = { 
     135        { 
     136                .start  = ADM8668_USB_BASE, 
     137                .end    = ADM8668_USB_BASE + 0x1FFFFF, 
     138                .flags  = IORESOURCE_MEM, 
     139        }, 
     140        { 
     141                .start  = INT_LVL_USB, 
     142                .end    = INT_LVL_USB, 
     143                .flags  = IORESOURCE_IRQ, 
     144        }, 
     145}; 
     146 
     147static struct usb_ehci_pdata usb_pdata = { 
     148        .caps_offset    = 0x100, 
     149        .has_tt         = 1, 
     150        .port_power_off = 1, 
     151}; 
     152 
     153static struct platform_device adm8668_usb_device = { 
     154        .name           = "ehci-platform", 
     155        .id             = -1, 
     156        .resource       = usb_resources, 
     157        .num_resources  = ARRAY_SIZE(usb_resources), 
     158        .dev.platform_data = &usb_pdata, 
     159}; 
     160 
    133161static struct platform_device *adm8668_devs[] = { 
    134162        &adm8668_eth0_device, 
    135163        &adm8668_eth1_device, 
    136164        &adm8668_nor_device, 
     165        &adm8668_usb_device, 
    137166}; 
    138167 
     
    163192} 
    164193 
     194static void adm8668_ehci_workaround(void) 
     195{ 
     196        u32 chipid; 
     197 
     198        chipid = ADM8668_CONFIG_REG(ADM8668_CR0); 
     199        ADM8668_CONFIG_REG(ADM8668_CR66) = 0x0C1600D9; 
     200 
     201        if (chipid == 0x86880001) 
     202                return; 
     203 
     204        ADM8668_CONFIG_REG(ADM8668_CR66) &= ~(3 << 20); 
     205        ADM8668_CONFIG_REG(ADM8668_CR66) |= (1 << 20); 
     206        pr_info("ADM8668: applied USB workaround\n"); 
     207} 
     208 
    165209 
    166210int __devinit adm8668_devs_register(void) 
     
    174218        adm8668_fetch_mac(0); 
    175219        adm8668_fetch_mac(1); 
     220        adm8668_ehci_workaround(); 
    176221 
    177222        return platform_add_devices(adm8668_devs, ARRAY_SIZE(adm8668_devs)); 
  • trunk/target/linux/adm8668/files/arch/mips/include/asm/mach-adm8668/adm8668.h

    r34556 r34561  
    6565#define ADM8668_CR1             0x04 
    6666#define ADM8668_CR3             0x0C 
     67#define ADM8668_CR66            0x108 
    6768 
    6869/** For GPIO control **/ 
Note: See TracChangeset for help on using the changeset viewer.