Commit 474118d0 authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/home/rmk/linux-2.6-arm

* master.kernel.org:/home/rmk/linux-2.6-arm:
  [ARM] Update mach-types
  [ARM] orion5x: D-link DNS-323 rev. B1 power-off
  [ARM] Orion5x: add GPIO LED and buttons for wrt350n v2
  [ARM] pxa: fix irq suspend/resume for pxa25x
  [ARM] pxa: fix the incorrect naming of AC97 reset pin config for pxa26x
  [ARM] pxa/corgi: fix incorrect default GPIO for UDC Vbus
  [ARM] Kirkwood: drive USB VBUS pin on rd88f6192-nas high on boot
  [ARM] Orion: fix PCIe inbound window programming when RAM size is not a power of two
parents d4d37bde ba45d525
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/ata_platform.h> #include <linux/ata_platform.h>
#include <linux/mv643xx_eth.h> #include <linux/mv643xx_eth.h>
#include <linux/gpio.h>
#include <linux/spi/flash.h> #include <linux/spi/flash.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/spi/orion_spi.h> #include <linux/spi/orion_spi.h>
...@@ -53,6 +54,11 @@ static void __init rd88f6192_init(void) ...@@ -53,6 +54,11 @@ static void __init rd88f6192_init(void)
*/ */
kirkwood_init(); kirkwood_init();
orion_gpio_set_valid(RD88F6192_GPIO_USB_VBUS, 1);
if (gpio_request(RD88F6192_GPIO_USB_VBUS, "USB VBUS") != 0 ||
gpio_direction_output(RD88F6192_GPIO_USB_VBUS, 1) != 0)
pr_err("RD-88F6192-NAS: failed to setup USB VBUS GPIO\n");
kirkwood_ehci_init(); kirkwood_ehci_init();
kirkwood_ge00_init(&rd88f6192_ge00_data); kirkwood_ge00_init(&rd88f6192_ge00_data);
kirkwood_sata_init(&rd88f6192_sata_data); kirkwood_sata_init(&rd88f6192_sata_data);
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/irq.h> #include <linux/irq.h>
...@@ -32,6 +33,7 @@ ...@@ -32,6 +33,7 @@
#define DNS323_GPIO_LED_RIGHT_AMBER 1 #define DNS323_GPIO_LED_RIGHT_AMBER 1
#define DNS323_GPIO_LED_LEFT_AMBER 2 #define DNS323_GPIO_LED_LEFT_AMBER 2
#define DNS323_GPIO_SYSTEM_UP 3
#define DNS323_GPIO_LED_POWER 5 #define DNS323_GPIO_LED_POWER 5
#define DNS323_GPIO_OVERTEMP 6 #define DNS323_GPIO_OVERTEMP 6
#define DNS323_GPIO_RTC 7 #define DNS323_GPIO_RTC 7
...@@ -239,7 +241,7 @@ static struct gpio_led dns323_leds[] = { ...@@ -239,7 +241,7 @@ static struct gpio_led dns323_leds[] = {
{ {
.name = "power:blue", .name = "power:blue",
.gpio = DNS323_GPIO_LED_POWER, .gpio = DNS323_GPIO_LED_POWER,
.active_low = 1, .default_state = LEDS_GPIO_DEFSTATE_ON,
}, { }, {
.name = "right:amber", .name = "right:amber",
.gpio = DNS323_GPIO_LED_RIGHT_AMBER, .gpio = DNS323_GPIO_LED_RIGHT_AMBER,
...@@ -334,7 +336,7 @@ static struct orion5x_mpp_mode dns323_mv88f5182_mpp_modes[] __initdata = { ...@@ -334,7 +336,7 @@ static struct orion5x_mpp_mode dns323_mv88f5182_mpp_modes[] __initdata = {
{ 0, MPP_UNUSED }, { 0, MPP_UNUSED },
{ 1, MPP_GPIO }, /* right amber LED (sata ch0) */ { 1, MPP_GPIO }, /* right amber LED (sata ch0) */
{ 2, MPP_GPIO }, /* left amber LED (sata ch1) */ { 2, MPP_GPIO }, /* left amber LED (sata ch1) */
{ 3, MPP_UNUSED }, { 3, MPP_GPIO }, /* system up flag */
{ 4, MPP_GPIO }, /* power button LED */ { 4, MPP_GPIO }, /* power button LED */
{ 5, MPP_GPIO }, /* power button LED */ { 5, MPP_GPIO }, /* power button LED */
{ 6, MPP_GPIO }, /* GMT G751-2f overtemp */ { 6, MPP_GPIO }, /* GMT G751-2f overtemp */
...@@ -372,13 +374,23 @@ static struct i2c_board_info __initdata dns323_i2c_devices[] = { ...@@ -372,13 +374,23 @@ static struct i2c_board_info __initdata dns323_i2c_devices[] = {
}, },
}; };
/* DNS-323 specific power off method */ /* DNS-323 rev. A specific power off method */
static void dns323_power_off(void) static void dns323a_power_off(void)
{ {
pr_info("%s: triggering power-off...\n", __func__); pr_info("%s: triggering power-off...\n", __func__);
gpio_set_value(DNS323_GPIO_POWER_OFF, 1); gpio_set_value(DNS323_GPIO_POWER_OFF, 1);
} }
/* DNS-323 rev B specific power off method */
static void dns323b_power_off(void)
{
pr_info("%s: triggering power-off...\n", __func__);
/* Pin has to be changed to 1 and back to 0 to do actual power off. */
gpio_set_value(DNS323_GPIO_POWER_OFF, 1);
mdelay(100);
gpio_set_value(DNS323_GPIO_POWER_OFF, 0);
}
static void __init dns323_init(void) static void __init dns323_init(void)
{ {
/* Setup basic Orion functions. Need to be called early. */ /* Setup basic Orion functions. Need to be called early. */
...@@ -424,11 +436,20 @@ static void __init dns323_init(void) ...@@ -424,11 +436,20 @@ static void __init dns323_init(void)
if (dns323_dev_id() == MV88F5182_DEV_ID) if (dns323_dev_id() == MV88F5182_DEV_ID)
orion5x_sata_init(&dns323_sata_data); orion5x_sata_init(&dns323_sata_data);
/* register dns323 specific power-off method */ /* The 5182 has flag to indicate the system is up. Without this flag
* set, power LED will flash and cannot be controlled via leds-gpio.
*/
if (dns323_dev_id() == MV88F5182_DEV_ID)
gpio_set_value(DNS323_GPIO_SYSTEM_UP, 1);
/* Register dns323 specific power-off method */
if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 || if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 ||
gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0) gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0)
pr_err("DNS323: failed to setup power-off GPIO\n"); pr_err("DNS323: failed to setup power-off GPIO\n");
pm_power_off = dns323_power_off; if (dns323_dev_id() == MV88F5182_DEV_ID)
pm_power_off = dns323b_power_off;
else
pm_power_off = dns323a_power_off;
} }
/* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */ /* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */
......
...@@ -15,6 +15,9 @@ ...@@ -15,6 +15,9 @@
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>
#include <linux/mv643xx_eth.h> #include <linux/mv643xx_eth.h>
#include <linux/ethtool.h> #include <linux/ethtool.h>
#include <linux/leds.h>
#include <linux/gpio_keys.h>
#include <linux/input.h>
#include <net/dsa.h> #include <net/dsa.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/gpio.h> #include <asm/gpio.h>
...@@ -24,6 +27,80 @@ ...@@ -24,6 +27,80 @@
#include "common.h" #include "common.h"
#include "mpp.h" #include "mpp.h"
/*
* LEDs attached to GPIO
*/
static struct gpio_led wrt350n_v2_led_pins[] = {
{
.name = "wrt350nv2:green:power",
.gpio = 0,
.active_low = 1,
}, {
.name = "wrt350nv2:green:security",
.gpio = 1,
.active_low = 1,
}, {
.name = "wrt350nv2:orange:power",
.gpio = 5,
.active_low = 1,
}, {
.name = "wrt350nv2:green:usb",
.gpio = 6,
.active_low = 1,
}, {
.name = "wrt350nv2:green:wireless",
.gpio = 7,
.active_low = 1,
},
};
static struct gpio_led_platform_data wrt350n_v2_led_data = {
.leds = wrt350n_v2_led_pins,
.num_leds = ARRAY_SIZE(wrt350n_v2_led_pins),
};
static struct platform_device wrt350n_v2_leds = {
.name = "leds-gpio",
.id = -1,
.dev = {
.platform_data = &wrt350n_v2_led_data,
},
};
/*
* Buttons attached to GPIO
*/
static struct gpio_keys_button wrt350n_v2_buttons[] = {
{
.code = KEY_RESTART,
.gpio = 3,
.desc = "Reset Button",
.active_low = 1,
}, {
.code = KEY_WLAN,
.gpio = 2,
.desc = "WPS Button",
.active_low = 1,
},
};
static struct gpio_keys_platform_data wrt350n_v2_button_data = {
.buttons = wrt350n_v2_buttons,
.nbuttons = ARRAY_SIZE(wrt350n_v2_buttons),
};
static struct platform_device wrt350n_v2_button_device = {
.name = "gpio-keys",
.id = -1,
.num_resources = 0,
.dev = {
.platform_data = &wrt350n_v2_button_data,
},
};
/*
* General setup
*/
static struct orion5x_mpp_mode wrt350n_v2_mpp_modes[] __initdata = { static struct orion5x_mpp_mode wrt350n_v2_mpp_modes[] __initdata = {
{ 0, MPP_GPIO }, /* Power LED green (0=on) */ { 0, MPP_GPIO }, /* Power LED green (0=on) */
{ 1, MPP_GPIO }, /* Security LED (0=on) */ { 1, MPP_GPIO }, /* Security LED (0=on) */
...@@ -140,6 +217,8 @@ static void __init wrt350n_v2_init(void) ...@@ -140,6 +217,8 @@ static void __init wrt350n_v2_init(void)
orion5x_setup_dev_boot_win(WRT350N_V2_NOR_BOOT_BASE, orion5x_setup_dev_boot_win(WRT350N_V2_NOR_BOOT_BASE,
WRT350N_V2_NOR_BOOT_SIZE); WRT350N_V2_NOR_BOOT_SIZE);
platform_device_register(&wrt350n_v2_nor_flash); platform_device_register(&wrt350n_v2_nor_flash);
platform_device_register(&wrt350n_v2_leds);
platform_device_register(&wrt350n_v2_button_device);
} }
static int __init wrt350n_v2_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) static int __init wrt350n_v2_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
......
...@@ -457,6 +457,7 @@ static struct pxaficp_platform_data corgi_ficp_platform_data = { ...@@ -457,6 +457,7 @@ static struct pxaficp_platform_data corgi_ficp_platform_data = {
* USB Device Controller * USB Device Controller
*/ */
static struct pxa2xx_udc_mach_info udc_info __initdata = { static struct pxa2xx_udc_mach_info udc_info __initdata = {
.gpio_vbus = -1,
/* no connect GPIO; corgi can't tell connection status */ /* no connect GPIO; corgi can't tell connection status */
.gpio_pullup = CORGI_GPIO_USB_PULLUP, .gpio_pullup = CORGI_GPIO_USB_PULLUP,
}; };
......
...@@ -169,7 +169,6 @@ ...@@ -169,7 +169,6 @@
#define GPIO86_nSDCS2 MFP_CFG_OUT(GPIO86, AF0, DRIVE_HIGH) #define GPIO86_nSDCS2 MFP_CFG_OUT(GPIO86, AF0, DRIVE_HIGH)
#define GPIO87_nSDCS3 MFP_CFG_OUT(GPIO87, AF0, DRIVE_HIGH) #define GPIO87_nSDCS3 MFP_CFG_OUT(GPIO87, AF0, DRIVE_HIGH)
#define GPIO88_RDnWR MFP_CFG_OUT(GPIO88, AF0, DRIVE_HIGH) #define GPIO88_RDnWR MFP_CFG_OUT(GPIO88, AF0, DRIVE_HIGH)
#define GPIO89_nACRESET MFP_CFG_OUT(GPIO89, AF0, DRIVE_HIGH)
/* USB */ /* USB */
#define GPIO9_USB_RCV MFP_CFG_IN(GPIO9, AF1) #define GPIO9_USB_RCV MFP_CFG_IN(GPIO9, AF1)
...@@ -186,6 +185,9 @@ ...@@ -186,6 +185,9 @@
#define GPIO30_ASSP_TXD MFP_CFG_OUT(GPIO30, AF3, DRIVE_LOW) #define GPIO30_ASSP_TXD MFP_CFG_OUT(GPIO30, AF3, DRIVE_LOW)
#define GPIO31_ASSP_SFRM_IN MFP_CFG_IN(GPIO31, AF1) #define GPIO31_ASSP_SFRM_IN MFP_CFG_IN(GPIO31, AF1)
#define GPIO31_ASSP_SFRM_OUT MFP_CFG_OUT(GPIO31, AF3, DRIVE_LOW) #define GPIO31_ASSP_SFRM_OUT MFP_CFG_OUT(GPIO31, AF3, DRIVE_LOW)
#endif
/* AC97 */
#define GPIO89_AC97_nRESET MFP_CFG_OUT(GPIO89, AF0, DRIVE_HIGH)
#endif /* CONFIG_CPU_PXA26x */
#endif /* __ASM_ARCH_MFP_PXA25X_H */ #endif /* __ASM_ARCH_MFP_PXA25X_H */
...@@ -164,8 +164,11 @@ static int pxa_irq_suspend(struct sys_device *dev, pm_message_t state) ...@@ -164,8 +164,11 @@ static int pxa_irq_suspend(struct sys_device *dev, pm_message_t state)
saved_icmr[i] = _ICMR(irq); saved_icmr[i] = _ICMR(irq);
_ICMR(irq) = 0; _ICMR(irq) = 0;
} }
if (cpu_is_pxa27x() || cpu_is_pxa3xx()) {
for (i = 0; i < pxa_internal_irq_nr; i++) for (i = 0; i < pxa_internal_irq_nr; i++)
saved_ipr[i] = IPR(i); saved_ipr[i] = IPR(i);
}
return 0; return 0;
} }
...@@ -174,12 +177,15 @@ static int pxa_irq_resume(struct sys_device *dev) ...@@ -174,12 +177,15 @@ static int pxa_irq_resume(struct sys_device *dev)
{ {
int i, irq = PXA_IRQ(0); int i, irq = PXA_IRQ(0);
if (cpu_is_pxa27x() || cpu_is_pxa3xx()) {
for (i = 0; i < pxa_internal_irq_nr; i++)
IPR(i) = saved_ipr[i];
}
for (i = 0; irq < PXA_IRQ(pxa_internal_irq_nr); i++, irq += 32) { for (i = 0; irq < PXA_IRQ(pxa_internal_irq_nr); i++, irq += 32) {
_ICMR(irq) = saved_icmr[i]; _ICMR(irq) = saved_icmr[i];
_ICLR(irq) = 0; _ICLR(irq) = 0;
} }
for (i = 0; i < pxa_internal_irq_nr; i++)
IPR(i) = saved_ipr[i];
ICCR = 1; ICCR = 1;
return 0; return 0;
......
...@@ -132,6 +132,12 @@ static void __init orion_pcie_setup_wins(void __iomem *base, ...@@ -132,6 +132,12 @@ static void __init orion_pcie_setup_wins(void __iomem *base,
size += cs->size; size += cs->size;
} }
/*
* Round up 'size' to the nearest power of two.
*/
if ((size & (size - 1)) != 0)
size = 1 << fls(size);
/* /*
* Setup BAR[1] to all DRAM banks. * Setup BAR[1] to all DRAM banks.
*/ */
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
# #
# http://www.arm.linux.org.uk/developer/machines/?action=new # http://www.arm.linux.org.uk/developer/machines/?action=new
# #
# Last update: Wed Dec 16 20:06:34 2009 # Last update: Thu Jan 28 22:15:54 2010
# #
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
# #
...@@ -2536,6 +2536,7 @@ davinci_dm6467tevm MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM 2548 ...@@ -2536,6 +2536,7 @@ davinci_dm6467tevm MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM 2548
c3ax03 MACH_C3AX03 C3AX03 2549 c3ax03 MACH_C3AX03 C3AX03 2549
mxt_td60 MACH_MXT_TD60 MXT_TD60 2550 mxt_td60 MACH_MXT_TD60 MXT_TD60 2550
esyx MACH_ESYX ESYX 2551 esyx MACH_ESYX ESYX 2551
dove_db2 MACH_DOVE_DB2 DOVE_DB2 2552
bulldog MACH_BULLDOG BULLDOG 2553 bulldog MACH_BULLDOG BULLDOG 2553
derell_me2000 MACH_DERELL_ME2000 DERELL_ME2000 2554 derell_me2000 MACH_DERELL_ME2000 DERELL_ME2000 2554
bcmring_base MACH_BCMRING_BASE BCMRING_BASE 2555 bcmring_base MACH_BCMRING_BASE BCMRING_BASE 2555
...@@ -2555,6 +2556,7 @@ iseo MACH_ISEO ISEO 2568 ...@@ -2555,6 +2556,7 @@ iseo MACH_ISEO ISEO 2568
cezanne MACH_CEZANNE CEZANNE 2569 cezanne MACH_CEZANNE CEZANNE 2569
lucca MACH_LUCCA LUCCA 2570 lucca MACH_LUCCA LUCCA 2570
supersmart MACH_SUPERSMART SUPERSMART 2571 supersmart MACH_SUPERSMART SUPERSMART 2571
arm11_board MACH_CS_MISANO CS_MISANO 2572
magnolia2 MACH_MAGNOLIA2 MAGNOLIA2 2573 magnolia2 MACH_MAGNOLIA2 MAGNOLIA2 2573
emxx MACH_EMXX EMXX 2574 emxx MACH_EMXX EMXX 2574
outlaw MACH_OUTLAW OUTLAW 2575 outlaw MACH_OUTLAW OUTLAW 2575
...@@ -2578,3 +2580,59 @@ glacier MACH_GLACIER GLACIER 2592 ...@@ -2578,3 +2580,59 @@ glacier MACH_GLACIER GLACIER 2592
phrazer_bulldog MACH_PHRAZER_BULLDOG PHRAZER_BULLDOG 2593 phrazer_bulldog MACH_PHRAZER_BULLDOG PHRAZER_BULLDOG 2593
omap3_bulldog MACH_OMAP3_BULLDOG OMAP3_BULLDOG 2594 omap3_bulldog MACH_OMAP3_BULLDOG OMAP3_BULLDOG 2594
pca101 MACH_PCA101 PCA101 2595 pca101 MACH_PCA101 PCA101 2595
buzzc MACH_BUZZC BUZZC 2596
sasie2 MACH_SASIE2 SASIE2 2597
davinci_cio MACH_DAVINCI_CIO DAVINCI_CIO 2598
smartmeter_dl MACH_SMARTMETER_DL SMARTMETER_DL 2599
wzl6410 MACH_WZL6410 WZL6410 2600
wzl6410m MACH_WZL6410M WZL6410M 2601
wzl6410f MACH_WZL6410F WZL6410F 2602
wzl6410i MACH_WZL6410I WZL6410I 2603
spacecom1 MACH_SPACECOM1 SPACECOM1 2604
pingu920 MACH_PINGU920 PINGU920 2605
bravoc MACH_BRAVOC BRAVOC 2606
cybo2440 MACH_CYBO2440 CYBO2440 2607
vdssw MACH_VDSSW VDSSW 2608
romulus MACH_ROMULUS ROMULUS 2609
omap_magic MACH_OMAP_MAGIC OMAP_MAGIC 2610
eltd100 MACH_ELTD100 ELTD100 2611
capc7117 MACH_CAPC7117 CAPC7117 2612
swan MACH_SWAN SWAN 2613
veu MACH_VEU VEU 2614
rm2 MACH_RM2 RM2 2615
tt2100 MACH_TT2100 TT2100 2616
venice MACH_VENICE VENICE 2617
pc7323 MACH_PC7323 PC7323 2618
masp MACH_MASP MASP 2619
fujitsu_tvstbsoc0 MACH_FUJITSU_TVSTBSOC FUJITSU_TVSTBSOC 2620
fujitsu_tvstbsoc1 MACH_FUJITSU_TVSTBSOC1 FUJITSU_TVSTBSOC1 2621
lexikon MACH_LEXIKON LEXIKON 2622
mini2440v2 MACH_MINI2440V2 MINI2440V2 2623
icontrol MACH_ICONTROL ICONTROL 2624
sheevad MACH_SHEEVAD SHEEVAD 2625
qsd8x50a_st1_1 MACH_QSD8X50A_ST1_1 QSD8X50A_ST1_1 2626
qsd8x50a_st1_5 MACH_QSD8X50A_ST1_5 QSD8X50A_ST1_5 2627
bee MACH_BEE BEE 2628
mx23evk MACH_MX23EVK MX23EVK 2629
ap4evb MACH_AP4EVB AP4EVB 2630
stockholm MACH_STOCKHOLM STOCKHOLM 2631
lpc_h3131 MACH_LPC_H3131 LPC_H3131 2632
stingray MACH_STINGRAY STINGRAY 2633
kraken MACH_KRAKEN KRAKEN 2634
gw2388 MACH_GW2388 GW2388 2635
jadecpu MACH_JADECPU JADECPU 2636
carlisle MACH_CARLISLE CARLISLE 2637
lux_sf9 MACH_LUX_SFT9 LUX_SFT9 2638
nemid_tb MACH_NEMID_TB NEMID_TB 2639
terrier MACH_TERRIER TERRIER 2640
turbot MACH_TURBOT TURBOT 2641
sanddab MACH_SANDDAB SANDDAB 2642
mx35_cicada MACH_MX35_CICADA MX35_CICADA 2643
ghi2703d MACH_GHI2703D GHI2703D 2644
lux_sfx9 MACH_LUX_SFX9 LUX_SFX9 2645
lux_sf9g MACH_LUX_SF9G LUX_SF9G 2646
lux_edk9 MACH_LUX_EDK9 LUX_EDK9 2647
hw90240 MACH_HW90240 HW90240 2648
dm365_leopard MACH_DM365_LEOPARD DM365_LEOPARD 2649
mityomapl138 MACH_MITYOMAPL138 MITYOMAPL138 2650
scat110 MACH_SCAT110 SCAT110 2651
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment