aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa/cm-x270.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-pxa/cm-x270.c')
-rw-r--r--arch/arm/mach-pxa/cm-x270.c408
1 files changed, 285 insertions, 123 deletions
diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c
index f5851d1adc25..402e807eae54 100644
--- a/arch/arm/mach-pxa/cm-x270.c
+++ b/arch/arm/mach-pxa/cm-x270.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * linux/arch/arm/mach-pxa/cm-x270.c 2 * linux/arch/arm/mach-pxa/cm-x270.c
3 * 3 *
4 * Copyright (C) 2007 CompuLab, Ltd. 4 * Copyright (C) 2007, 2008 CompuLab, Ltd.
5 * Mike Rapoport <mike@compulab.co.il> 5 * Mike Rapoport <mike@compulab.co.il>
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
@@ -9,43 +9,156 @@
9 * published by the Free Software Foundation. 9 * published by the Free Software Foundation.
10 */ 10 */
11 11
12#include <linux/types.h>
13#include <linux/pm.h>
14#include <linux/fb.h>
15#include <linux/platform_device.h> 12#include <linux/platform_device.h>
16#include <linux/irq.h>
17#include <linux/sysdev.h> 13#include <linux/sysdev.h>
18#include <linux/io.h> 14#include <linux/irq.h>
19#include <linux/delay.h> 15#include <linux/gpio.h>
20 16
21#include <linux/dm9000.h> 17#include <linux/dm9000.h>
22#include <linux/rtc-v3020.h> 18#include <linux/rtc-v3020.h>
23#include <linux/serial_8250.h>
24
25#include <video/mbxfb.h> 19#include <video/mbxfb.h>
20#include <linux/leds.h>
26 21
27#include <asm/mach/arch.h> 22#include <asm/mach/arch.h>
28#include <asm/mach-types.h> 23#include <asm/mach-types.h>
29#include <asm/mach/map.h> 24#include <asm/mach/map.h>
30 25
31#include <asm/arch/pxa-regs.h>
32#include <asm/arch/pxa2xx-regs.h> 26#include <asm/arch/pxa2xx-regs.h>
33#include <asm/arch/pxa2xx-gpio.h> 27#include <asm/arch/mfp-pxa27x.h>
28#include <asm/arch/pxa-regs.h>
29#include <asm/arch/audio.h>
34#include <asm/arch/pxafb.h> 30#include <asm/arch/pxafb.h>
35#include <asm/arch/ohci.h> 31#include <asm/arch/ohci.h>
36#include <asm/arch/mmc.h> 32#include <asm/arch/mmc.h>
37#include <asm/arch/bitfield.h> 33#include <asm/arch/bitfield.h>
38#include <asm/arch/cm-x270.h>
39 34
40#include <asm/hardware/it8152.h> 35#include <asm/hardware/it8152.h>
41 36
42#include "generic.h" 37#include "generic.h"
43#include "cm-x270-pci.h" 38#include "cm-x270-pci.h"
44 39
40/* virtual addresses for statically mapped regions */
41#define CMX270_VIRT_BASE (0xe8000000)
42#define CMX270_IT8152_VIRT (CMX270_VIRT_BASE)
43
45#define RTC_PHYS_BASE (PXA_CS1_PHYS + (5 << 22)) 44#define RTC_PHYS_BASE (PXA_CS1_PHYS + (5 << 22))
46#define DM9000_PHYS_BASE (PXA_CS1_PHYS + (6 << 22)) 45#define DM9000_PHYS_BASE (PXA_CS1_PHYS + (6 << 22))
47 46
48static struct resource cmx270_dm9k_resource[] = { 47/* GPIO IRQ usage */
48#define GPIO10_ETHIRQ (10)
49#define GPIO22_IT8152_IRQ (22)
50#define GPIO83_MMC_IRQ (83)
51#define GPIO95_GFXIRQ (95)
52
53#define CMX270_ETHIRQ IRQ_GPIO(GPIO10_ETHIRQ)
54#define CMX270_IT8152_IRQ IRQ_GPIO(GPIO22_IT8152_IRQ)
55#define CMX270_MMC_IRQ IRQ_GPIO(GPIO83_MMC_IRQ)
56#define CMX270_GFXIRQ IRQ_GPIO(GPIO95_GFXIRQ)
57
58/* MMC power enable */
59#define GPIO105_MMC_POWER (105)
60
61static unsigned long cmx270_pin_config[] = {
62 /* AC'97 */
63 GPIO28_AC97_BITCLK,
64 GPIO29_AC97_SDATA_IN_0,
65 GPIO30_AC97_SDATA_OUT,
66 GPIO31_AC97_SYNC,
67 GPIO98_AC97_SYSCLK,
68 GPIO113_AC97_nRESET,
69
70 /* BTUART */
71 GPIO42_BTUART_RXD,
72 GPIO43_BTUART_TXD,
73 GPIO44_BTUART_CTS,
74 GPIO45_BTUART_RTS,
75
76 /* STUART */
77 GPIO46_STUART_RXD,
78 GPIO47_STUART_TXD,
79
80 /* MCI controller */
81 GPIO32_MMC_CLK,
82 GPIO112_MMC_CMD,
83 GPIO92_MMC_DAT_0,
84 GPIO109_MMC_DAT_1,
85 GPIO110_MMC_DAT_2,
86 GPIO111_MMC_DAT_3,
87
88 /* LCD */
89 GPIO58_LCD_LDD_0,
90 GPIO59_LCD_LDD_1,
91 GPIO60_LCD_LDD_2,
92 GPIO61_LCD_LDD_3,
93 GPIO62_LCD_LDD_4,
94 GPIO63_LCD_LDD_5,
95 GPIO64_LCD_LDD_6,
96 GPIO65_LCD_LDD_7,
97 GPIO66_LCD_LDD_8,
98 GPIO67_LCD_LDD_9,
99 GPIO68_LCD_LDD_10,
100 GPIO69_LCD_LDD_11,
101 GPIO70_LCD_LDD_12,
102 GPIO71_LCD_LDD_13,
103 GPIO72_LCD_LDD_14,
104 GPIO73_LCD_LDD_15,
105 GPIO74_LCD_FCLK,
106 GPIO75_LCD_LCLK,
107 GPIO76_LCD_PCLK,
108 GPIO77_LCD_BIAS,
109
110 /* I2C */
111 GPIO117_I2C_SCL,
112 GPIO118_I2C_SDA,
113
114 /* SSP1 */
115 GPIO23_SSP1_SCLK,
116 GPIO24_SSP1_SFRM,
117 GPIO25_SSP1_TXD,
118 GPIO26_SSP1_RXD,
119
120 /* SSP2 */
121 GPIO19_SSP2_SCLK,
122 GPIO14_SSP2_SFRM,
123 GPIO87_SSP2_TXD,
124 GPIO88_SSP2_RXD,
125
126 /* PC Card */
127 GPIO48_nPOE,
128 GPIO49_nPWE,
129 GPIO50_nPIOR,
130 GPIO51_nPIOW,
131 GPIO85_nPCE_1,
132 GPIO54_nPCE_2,
133 GPIO55_nPREG,
134 GPIO56_nPWAIT,
135 GPIO57_nIOIS16,
136
137 /* SDRAM and local bus */
138 GPIO15_nCS_1,
139 GPIO78_nCS_2,
140 GPIO79_nCS_3,
141 GPIO80_nCS_4,
142 GPIO33_nCS_5,
143 GPIO49_nPWE,
144 GPIO18_RDY,
145
146 /* GPIO */
147 GPIO0_GPIO | WAKEUP_ON_EDGE_BOTH,
148 GPIO105_GPIO | MFP_LPM_DRIVE_HIGH, /* MMC/SD power */
149 GPIO53_GPIO, /* PC card reset */
150
151 /* NAND controls */
152 GPIO11_GPIO | MFP_LPM_DRIVE_HIGH, /* NAND CE# */
153 GPIO89_GPIO, /* NAND Ready/Busy */
154
155 /* interrupts */
156 GPIO10_GPIO, /* DM9000 interrupt */
157 GPIO83_GPIO, /* MMC card detect */
158};
159
160#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
161static struct resource cmx270_dm9000_resource[] = {
49 [0] = { 162 [0] = {
50 .start = DM9000_PHYS_BASE, 163 .start = DM9000_PHYS_BASE,
51 .end = DM9000_PHYS_BASE + 4, 164 .end = DM9000_PHYS_BASE + 4,
@@ -63,37 +176,45 @@ static struct resource cmx270_dm9k_resource[] = {
63 } 176 }
64}; 177};
65 178
66/* for the moment we limit ourselves to 32bit IO until some 179static struct dm9000_plat_data cmx270_dm9000_platdata = {
67 * better IO routines can be written and tested
68 */
69static struct dm9000_plat_data cmx270_dm9k_platdata = {
70 .flags = DM9000_PLATF_32BITONLY, 180 .flags = DM9000_PLATF_32BITONLY,
71}; 181};
72 182
73/* Ethernet device */ 183static struct platform_device cmx270_dm9000_device = {
74static struct platform_device cmx270_device_dm9k = {
75 .name = "dm9000", 184 .name = "dm9000",
76 .id = 0, 185 .id = 0,
77 .num_resources = ARRAY_SIZE(cmx270_dm9k_resource), 186 .num_resources = ARRAY_SIZE(cmx270_dm9000_resource),
78 .resource = cmx270_dm9k_resource, 187 .resource = cmx270_dm9000_resource,
79 .dev = { 188 .dev = {
80 .platform_data = &cmx270_dm9k_platdata, 189 .platform_data = &cmx270_dm9000_platdata,
81 } 190 }
82}; 191};
83 192
84/* audio device */ 193static void __init cmx270_init_dm9000(void)
85static struct platform_device cmx270_audio_device = { 194{
86 .name = "pxa2xx-ac97", 195 platform_device_register(&cmx270_dm9000_device);
87 .id = -1, 196}
88}; 197#else
198static inline void cmx270_init_dm9000(void) {}
199#endif
89 200
90/* touchscreen controller */ 201/* UCB1400 touchscreen controller */
202#if defined(CONFIG_TOUCHSCREEN_UCB1400) || defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
91static struct platform_device cmx270_ts_device = { 203static struct platform_device cmx270_ts_device = {
92 .name = "ucb1400_ts", 204 .name = "ucb1400_ts",
93 .id = -1, 205 .id = -1,
94}; 206};
95 207
96/* RTC */ 208static void __init cmx270_init_touchscreen(void)
209{
210 platform_device_register(&cmx270_ts_device);
211}
212#else
213static inline void cmx270_init_touchscreen(void) {}
214#endif
215
216/* V3020 RTC */
217#if defined(CONFIG_RTC_DRV_V3020) || defined(CONFIG_RTC_DRV_V3020_MODULE)
97static struct resource cmx270_v3020_resource[] = { 218static struct resource cmx270_v3020_resource[] = {
98 [0] = { 219 [0] = {
99 .start = RTC_PHYS_BASE, 220 .start = RTC_PHYS_BASE,
@@ -116,28 +237,67 @@ static struct platform_device cmx270_rtc_device = {
116 } 237 }
117}; 238};
118 239
119/* 240static void __init cmx270_init_rtc(void)
120 * CM-X270 LEDs 241{
121 */ 242 platform_device_register(&cmx270_rtc_device);
243}
244#else
245static inline void cmx270_init_rtc(void) {}
246#endif
247
248/* CM-X270 LEDs */
249#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
250static struct gpio_led cmx270_leds[] = {
251 [0] = {
252 .name = "cm-x270:red",
253 .default_trigger = "nand-disk",
254 .gpio = 93,
255 .active_low = 1,
256 },
257 [1] = {
258 .name = "cm-x270:green",
259 .default_trigger = "heartbeat",
260 .gpio = 94,
261 .active_low = 1,
262 },
263};
264
265static struct gpio_led_platform_data cmx270_gpio_led_pdata = {
266 .num_leds = ARRAY_SIZE(cmx270_leds),
267 .leds = cmx270_leds,
268};
269
122static struct platform_device cmx270_led_device = { 270static struct platform_device cmx270_led_device = {
123 .name = "cm-x270-led", 271 .name = "leds-gpio",
124 .id = -1, 272 .id = -1,
273 .dev = {
274 .platform_data = &cmx270_gpio_led_pdata,
275 },
125}; 276};
126 277
278static void __init cmx270_init_leds(void)
279{
280 platform_device_register(&cmx270_led_device);
281}
282#else
283static inline void cmx270_init_leds(void) {}
284#endif
285
127/* 2700G graphics */ 286/* 2700G graphics */
287#if defined(CONFIG_FB_MBX) || defined(CONFIG_FB_MBX_MODULE)
128static u64 fb_dma_mask = ~(u64)0; 288static u64 fb_dma_mask = ~(u64)0;
129 289
130static struct resource cmx270_2700G_resource[] = { 290static struct resource cmx270_2700G_resource[] = {
131 /* frame buffer memory including ODFB and External SDRAM */ 291 /* frame buffer memory including ODFB and External SDRAM */
132 [0] = { 292 [0] = {
133 .start = MARATHON_PHYS, 293 .start = PXA_CS2_PHYS,
134 .end = MARATHON_PHYS + 0x02000000, 294 .end = PXA_CS2_PHYS + 0x01ffffff,
135 .flags = IORESOURCE_MEM, 295 .flags = IORESOURCE_MEM,
136 }, 296 },
137 /* Marathon registers */ 297 /* Marathon registers */
138 [1] = { 298 [1] = {
139 .start = MARATHON_PHYS + 0x03fe0000, 299 .start = PXA_CS2_PHYS + 0x03fe0000,
140 .end = MARATHON_PHYS + 0x03ffffff, 300 .end = PXA_CS2_PHYS + 0x03ffffff,
141 .flags = IORESOURCE_MEM, 301 .flags = IORESOURCE_MEM,
142 }, 302 },
143}; 303};
@@ -205,44 +365,15 @@ static struct platform_device cmx270_2700G = {
205 .id = -1, 365 .id = -1,
206}; 366};
207 367
208static u64 ata_dma_mask = ~(u64)0; 368static void __init cmx270_init_2700G(void)
209 369{
210static struct platform_device cmx270_ata = { 370 platform_device_register(&cmx270_2700G);
211 .name = "pata_cm_x270", 371}
212 .id = -1, 372#else
213 .dev = { 373static inline void cmx270_init_2700G(void) {}
214 .dma_mask = &ata_dma_mask, 374#endif
215 .coherent_dma_mask = 0xffffffff,
216 },
217};
218
219/* platform devices */
220static struct platform_device *platform_devices[] __initdata = {
221 &cmx270_device_dm9k,
222 &cmx270_audio_device,
223 &cmx270_rtc_device,
224 &cmx270_2700G,
225 &cmx270_led_device,
226 &cmx270_ts_device,
227 &cmx270_ata,
228};
229
230/* Map PCI companion and IDE/General Purpose CS statically */
231static struct map_desc cmx270_io_desc[] __initdata = {
232 [0] = { /* IDE/general purpose space */
233 .virtual = CMX270_IDE104_VIRT,
234 .pfn = __phys_to_pfn(CMX270_IDE104_PHYS),
235 .length = SZ_64M - SZ_8M,
236 .type = MT_DEVICE
237 },
238 [1] = { /* PCI bridge */
239 .virtual = CMX270_IT8152_VIRT,
240 .pfn = __phys_to_pfn(CMX270_IT8152_PHYS),
241 .length = SZ_64M,
242 .type = MT_DEVICE
243 },
244};
245 375
376#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
246/* 377/*
247 Display definitions 378 Display definitions
248 keep these for backwards compatibility, although symbolic names (as 379 keep these for backwards compatibility, although symbolic names (as
@@ -452,7 +583,16 @@ static int __init cmx270_set_display(char *str)
452*/ 583*/
453__setup("monitor=", cmx270_set_display); 584__setup("monitor=", cmx270_set_display);
454 585
586static void __init cmx270_init_display(void)
587{
588 set_pxa_fb_info(cmx270_display);
589}
590#else
591static inline void cmx270_init_display(void) {}
592#endif
593
455/* PXA27x OHCI controller setup */ 594/* PXA27x OHCI controller setup */
595#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
456static int cmx270_ohci_init(struct device *dev) 596static int cmx270_ohci_init(struct device *dev)
457{ 597{
458 /* Set the Power Control Polarity Low */ 598 /* Set the Power Control Polarity Low */
@@ -467,35 +607,37 @@ static struct pxaohci_platform_data cmx270_ohci_platform_data = {
467 .init = cmx270_ohci_init, 607 .init = cmx270_ohci_init,
468}; 608};
469 609
610static void __init cmx270_init_ohci(void)
611{
612 pxa_set_ohci_info(&cmx270_ohci_platform_data);
613}
614#else
615static inline void cmx270_init_ohci(void) {}
616#endif
470 617
618#if defined(CONFIG_MMC) || defined(CONFIG_MMC_MODULE)
471static int cmx270_mci_init(struct device *dev, 619static int cmx270_mci_init(struct device *dev,
472 irq_handler_t cmx270_detect_int, 620 irq_handler_t cmx270_detect_int,
473 void *data) 621 void *data)
474{ 622{
475 int err; 623 int err;
476 624
477 /* 625 err = gpio_request(GPIO105_MMC_POWER, "MMC/SD power");
478 * setup GPIO for PXA27x MMC controller 626 if (err) {
479 */ 627 dev_warn(dev, "power gpio unavailable\n");
480 pxa_gpio_mode(GPIO32_MMCCLK_MD); 628 return err;
481 pxa_gpio_mode(GPIO112_MMCCMD_MD); 629 }
482 pxa_gpio_mode(GPIO92_MMCDAT0_MD);
483 pxa_gpio_mode(GPIO109_MMCDAT1_MD);
484 pxa_gpio_mode(GPIO110_MMCDAT2_MD);
485 pxa_gpio_mode(GPIO111_MMCDAT3_MD);
486
487 /* SB-X270 uses GPIO105 as SD power enable */
488 pxa_gpio_mode(105 | GPIO_OUT);
489 630
490 /* card detect IRQ on GPIO 83 */ 631 gpio_direction_output(GPIO105_MMC_POWER, 0);
491 pxa_gpio_mode(IRQ_TO_GPIO(CMX270_MMC_IRQ));
492 632
493 err = request_irq(CMX270_MMC_IRQ, cmx270_detect_int, 633 err = request_irq(CMX270_MMC_IRQ, cmx270_detect_int,
494 IRQF_DISABLED | IRQF_TRIGGER_FALLING, 634 IRQF_DISABLED | IRQF_TRIGGER_FALLING,
495 "MMC card detect", data); 635 "MMC card detect", data);
496 if (err) 636 if (err) {
497 printk(KERN_ERR "cmx270_mci_init: MMC/SD: can't" 637 gpio_free(GPIO105_MMC_POWER);
498 " request MMC card detect IRQ\n"); 638 dev_err(dev, "cmx270_mci_init: MMC/SD: can't"
639 " request MMC card detect IRQ\n");
640 }
499 641
500 return err; 642 return err;
501} 643}
@@ -505,17 +647,18 @@ static void cmx270_mci_setpower(struct device *dev, unsigned int vdd)
505 struct pxamci_platform_data *p_d = dev->platform_data; 647 struct pxamci_platform_data *p_d = dev->platform_data;
506 648
507 if ((1 << vdd) & p_d->ocr_mask) { 649 if ((1 << vdd) & p_d->ocr_mask) {
508 printk(KERN_DEBUG "%s: on\n", __func__); 650 dev_dbg(dev, "power on\n");
509 GPCR(105) = GPIO_bit(105); 651 gpio_set_value(GPIO105_MMC_POWER, 0);
510 } else { 652 } else {
511 GPSR(105) = GPIO_bit(105); 653 gpio_set_value(GPIO105_MMC_POWER, 1);
512 printk(KERN_DEBUG "%s: off\n", __func__); 654 dev_dbg(dev, "power off\n");
513 } 655 }
514} 656}
515 657
516static void cmx270_mci_exit(struct device *dev, void *data) 658static void cmx270_mci_exit(struct device *dev, void *data)
517{ 659{
518 free_irq(CMX270_MMC_IRQ, data); 660 free_irq(CMX270_MMC_IRQ, data);
661 gpio_free(GPIO105_MMC_POWER);
519} 662}
520 663
521static struct pxamci_platform_data cmx270_mci_platform_data = { 664static struct pxamci_platform_data cmx270_mci_platform_data = {
@@ -525,6 +668,14 @@ static struct pxamci_platform_data cmx270_mci_platform_data = {
525 .exit = cmx270_mci_exit, 668 .exit = cmx270_mci_exit,
526}; 669};
527 670
671static void __init cmx270_init_mmc(void)
672{
673 pxa_set_mci_info(&cmx270_mci_platform_data);
674}
675#else
676static inline void cmx270_init_mmc(void) {}
677#endif
678
528#ifdef CONFIG_PM 679#ifdef CONFIG_PM
529static unsigned long sleep_save_msc[10]; 680static unsigned long sleep_save_msc[10];
530 681
@@ -586,52 +737,63 @@ static int __init cmx270_pm_init(void)
586static int __init cmx270_pm_init(void) { return 0; } 737static int __init cmx270_pm_init(void) { return 0; }
587#endif 738#endif
588 739
740#if defined(CONFIG_SND_PXA2XX_AC97) || defined(CONFIG_SND_PXA2XX_AC97_MODULE)
741static void __init cmx270_init_ac97(void)
742{
743 pxa_set_ac97_info(NULL);
744}
745#else
746static inline void cmx270_init_ac97(void) {}
747#endif
748
589static void __init cmx270_init(void) 749static void __init cmx270_init(void)
590{ 750{
591 cmx270_pm_init(); 751 cmx270_pm_init();
592 752
593 set_pxa_fb_info(cmx270_display); 753 pxa2xx_mfp_config(ARRAY_AND_SIZE(cmx270_pin_config));
594 754
595 /* register CM-X270 platform devices */ 755 cmx270_init_dm9000();
596 platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); 756 cmx270_init_rtc();
597 757 cmx270_init_display();
598 /* set MCI and OHCI platform parameters */ 758 cmx270_init_mmc();
599 pxa_set_mci_info(&cmx270_mci_platform_data); 759 cmx270_init_ohci();
600 pxa_set_ohci_info(&cmx270_ohci_platform_data); 760 cmx270_init_ac97();
601 761 cmx270_init_touchscreen();
602 /* This enables the STUART */ 762 cmx270_init_leds();
603 pxa_gpio_mode(GPIO46_STRXD_MD); 763 cmx270_init_2700G();
604 pxa_gpio_mode(GPIO47_STTXD_MD);
605
606 /* This enables the BTUART */
607 pxa_gpio_mode(GPIO42_BTRXD_MD);
608 pxa_gpio_mode(GPIO43_BTTXD_MD);
609 pxa_gpio_mode(GPIO44_BTCTS_MD);
610 pxa_gpio_mode(GPIO45_BTRTS_MD);
611} 764}
612 765
613static void __init cmx270_init_irq(void) 766static void __init cmx270_init_irq(void)
614{ 767{
615 pxa27x_init_irq(); 768 pxa27x_init_irq();
616 769
770 cmx270_pci_init_irq(GPIO22_IT8152_IRQ);
771}
617 772
618 cmx270_pci_init_irq(); 773#ifdef CONFIG_PCI
774/* Map PCI companion statically */
775static struct map_desc cmx270_io_desc[] __initdata = {
776 [0] = { /* PCI bridge */
777 .virtual = CMX270_IT8152_VIRT,
778 .pfn = __phys_to_pfn(PXA_CS4_PHYS),
779 .length = SZ_64M,
780 .type = MT_DEVICE
781 },
782};
619 783
620 /* Setup interrupt for dm9000 */ 784static void __init cmx270_map_io(void)
621 pxa_gpio_mode(IRQ_TO_GPIO(CMX270_ETHIRQ)); 785{
622 set_irq_type(CMX270_ETHIRQ, IRQT_RISING); 786 pxa_map_io();
787 iotable_init(cmx270_io_desc, ARRAY_SIZE(cmx270_io_desc));
623 788
624 /* Setup interrupt for 2700G */ 789 it8152_base_address = CMX270_IT8152_VIRT;
625 pxa_gpio_mode(IRQ_TO_GPIO(CMX270_GFXIRQ));
626 set_irq_type(CMX270_GFXIRQ, IRQT_FALLING);
627} 790}
628 791#else
629static void __init cmx270_map_io(void) 792static void __init cmx270_map_io(void)
630{ 793{
631 pxa_map_io(); 794 pxa_map_io();
632 iotable_init(cmx270_io_desc, ARRAY_SIZE(cmx270_io_desc));
633} 795}
634 796#endif
635 797
636MACHINE_START(ARMCORE, "Compulab CM-x270") 798MACHINE_START(ARMCORE, "Compulab CM-x270")
637 .boot_params = 0xa0000100, 799 .boot_params = 0xa0000100,