Blame view

arch/arm/mach-s5pv210/mach-smdkv210.c 7.86 KB
981744165   Kukjin Kim   ARM: S5PV210: Add...
1
2
3
4
5
6
7
8
9
10
11
12
  /* linux/arch/arm/mach-s5pv210/mach-smdkv210.c
   *
   * Copyright (c) 2010 Samsung Electronics Co., Ltd.
   *		http://www.samsung.com/
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
  */
  
  #include <linux/kernel.h>
  #include <linux/types.h>
170d7415d   Naveen Krishna Ch   ARM: S5PV210: Add...
13
  #include <linux/i2c.h>
981744165   Kukjin Kim   ARM: S5PV210: Add...
14
15
  #include <linux/init.h>
  #include <linux/serial_core.h>
edbaa603e   Kay Sievers   driver-core: remo...
16
  #include <linux/device.h>
9b580cdb1   Thomas Abraham   ARM: S5PV210: Add...
17
  #include <linux/dm9000.h>
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
18
  #include <linux/fb.h>
9b580cdb1   Thomas Abraham   ARM: S5PV210: Add...
19
  #include <linux/gpio.h>
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
20
  #include <linux/delay.h>
5cd435b4a   Banajit Goswami   ARM: SAMSUNG: Add...
21
  #include <linux/pwm_backlight.h>
981744165   Kukjin Kim   ARM: S5PV210: Add...
22

bb3a4ebe6   Jamie Iles   ARM: samsung: con...
23
  #include <asm/hardware/vic.h>
981744165   Kukjin Kim   ARM: S5PV210: Add...
24
25
26
27
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/setup.h>
  #include <asm/mach-types.h>
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
28
  #include <video/platform_lcd.h>
981744165   Kukjin Kim   ARM: S5PV210: Add...
29
30
31
32
  #include <mach/map.h>
  #include <mach/regs-clock.h>
  
  #include <plat/regs-serial.h>
9b580cdb1   Thomas Abraham   ARM: S5PV210: Add...
33
34
  #include <plat/regs-srom.h>
  #include <plat/gpio-cfg.h>
981744165   Kukjin Kim   ARM: S5PV210: Add...
35
36
  #include <plat/devs.h>
  #include <plat/cpu.h>
41d8289d1   Naveen Krishna Ch   ARM: S5PV210: Add...
37
38
  #include <plat/adc.h>
  #include <plat/ts.h>
4b9a5ad56   Abhilash Kesavan   ARM: S5PV210: Add...
39
  #include <plat/ata.h>
170d7415d   Naveen Krishna Ch   ARM: S5PV210: Add...
40
  #include <plat/iic.h>
88a1cc438   Naveen Krishna Ch   ARM: S5PV210: Add...
41
  #include <plat/keypad.h>
ea31fd433   Jongpill Lee   ARM: S5PV210: Add...
42
  #include <plat/pm.h>
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
43
  #include <plat/fb.h>
20780fcc4   Sangbeom Kim   ARM: S5P: Update ...
44
  #include <plat/s5p-time.h>
84ca326c7   Banajit Goswami   ARM: S5PV210: Add...
45
  #include <plat/backlight.h>
7bf3ba6b3   Ajay Kumar   ARM: S5PV210: Cle...
46
  #include <plat/regs-fb-v4.h>
981744165   Kukjin Kim   ARM: S5PV210: Add...
47

3fa754c29   Kukjin Kim   ARM: 7248/1: S5PV...
48
  #include "common.h"
981744165   Kukjin Kim   ARM: S5PV210: Add...
49
  /* Following are default values for UCON, ULCON and UFCON UART registers */
c8def0857   Kukjin Kim   ARM: S5P: Changes...
50
  #define SMDKV210_UCON_DEFAULT	(S3C2410_UCON_TXILEVEL |	\
981744165   Kukjin Kim   ARM: S5PV210: Add...
51
52
53
54
55
  				 S3C2410_UCON_RXILEVEL |	\
  				 S3C2410_UCON_TXIRQMODE |	\
  				 S3C2410_UCON_RXIRQMODE |	\
  				 S3C2410_UCON_RXFIFO_TOI |	\
  				 S3C2443_UCON_RXERR_IRQEN)
c8def0857   Kukjin Kim   ARM: S5P: Changes...
56
  #define SMDKV210_ULCON_DEFAULT	S3C2410_LCON_CS8
981744165   Kukjin Kim   ARM: S5PV210: Add...
57

c8def0857   Kukjin Kim   ARM: S5P: Changes...
58
  #define SMDKV210_UFCON_DEFAULT	(S3C2410_UFCON_FIFOMODE |	\
981744165   Kukjin Kim   ARM: S5PV210: Add...
59
60
61
62
63
64
65
  				 S5PV210_UFCON_TXTRIG4 |	\
  				 S5PV210_UFCON_RXTRIG4)
  
  static struct s3c2410_uartcfg smdkv210_uartcfgs[] __initdata = {
  	[0] = {
  		.hwport		= 0,
  		.flags		= 0,
c8def0857   Kukjin Kim   ARM: S5P: Changes...
66
67
68
  		.ucon		= SMDKV210_UCON_DEFAULT,
  		.ulcon		= SMDKV210_ULCON_DEFAULT,
  		.ufcon		= SMDKV210_UFCON_DEFAULT,
981744165   Kukjin Kim   ARM: S5PV210: Add...
69
70
71
72
  	},
  	[1] = {
  		.hwport		= 1,
  		.flags		= 0,
c8def0857   Kukjin Kim   ARM: S5P: Changes...
73
74
75
  		.ucon		= SMDKV210_UCON_DEFAULT,
  		.ulcon		= SMDKV210_ULCON_DEFAULT,
  		.ufcon		= SMDKV210_UFCON_DEFAULT,
981744165   Kukjin Kim   ARM: S5PV210: Add...
76
77
78
79
  	},
  	[2] = {
  		.hwport		= 2,
  		.flags		= 0,
c8def0857   Kukjin Kim   ARM: S5P: Changes...
80
81
82
  		.ucon		= SMDKV210_UCON_DEFAULT,
  		.ulcon		= SMDKV210_ULCON_DEFAULT,
  		.ufcon		= SMDKV210_UFCON_DEFAULT,
981744165   Kukjin Kim   ARM: S5PV210: Add...
83
84
85
86
  	},
  	[3] = {
  		.hwport		= 3,
  		.flags		= 0,
c8def0857   Kukjin Kim   ARM: S5P: Changes...
87
88
89
  		.ucon		= SMDKV210_UCON_DEFAULT,
  		.ulcon		= SMDKV210_ULCON_DEFAULT,
  		.ufcon		= SMDKV210_UFCON_DEFAULT,
981744165   Kukjin Kim   ARM: S5PV210: Add...
90
91
  	},
  };
4b9a5ad56   Abhilash Kesavan   ARM: S5PV210: Add...
92
93
94
  static struct s3c_ide_platdata smdkv210_ide_pdata __initdata = {
  	.setup_gpio	= s5pv210_ide_setup_gpio,
  };
88a1cc438   Naveen Krishna Ch   ARM: S5PV210: Add...
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  static uint32_t smdkv210_keymap[] __initdata = {
  	/* KEY(row, col, keycode) */
  	KEY(0, 3, KEY_1), KEY(0, 4, KEY_2), KEY(0, 5, KEY_3),
  	KEY(0, 6, KEY_4), KEY(0, 7, KEY_5),
  	KEY(1, 3, KEY_A), KEY(1, 4, KEY_B), KEY(1, 5, KEY_C),
  	KEY(1, 6, KEY_D), KEY(1, 7, KEY_E)
  };
  
  static struct matrix_keymap_data smdkv210_keymap_data __initdata = {
  	.keymap		= smdkv210_keymap,
  	.keymap_size	= ARRAY_SIZE(smdkv210_keymap),
  };
  
  static struct samsung_keypad_platdata smdkv210_keypad_data __initdata = {
  	.keymap_data	= &smdkv210_keymap_data,
  	.rows		= 8,
  	.cols		= 8,
  };
9b580cdb1   Thomas Abraham   ARM: S5PV210: Add...
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
  static struct resource smdkv210_dm9000_resources[] = {
  	[0] = {
  		.start	= S5PV210_PA_SROM_BANK5,
  		.end	= S5PV210_PA_SROM_BANK5,
  		.flags	= IORESOURCE_MEM,
  	},
  	[1] = {
  		.start	= S5PV210_PA_SROM_BANK5 + 2,
  		.end	= S5PV210_PA_SROM_BANK5 + 2,
  		.flags	= IORESOURCE_MEM,
  	},
  	[2] = {
  		.start	= IRQ_EINT(9),
  		.end	= IRQ_EINT(9),
  		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
  	},
  };
  
  static struct dm9000_plat_data smdkv210_dm9000_platdata = {
  	.flags		= DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,
  	.dev_addr	= { 0x00, 0x09, 0xc0, 0xff, 0xec, 0x48 },
  };
  
  struct platform_device smdkv210_dm9000 = {
  	.name		= "dm9000",
  	.id		= -1,
  	.num_resources	= ARRAY_SIZE(smdkv210_dm9000_resources),
  	.resource	= smdkv210_dm9000_resources,
  	.dev		= {
  		.platform_data	= &smdkv210_dm9000_platdata,
  	},
  };
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
145
146
147
148
149
  static void smdkv210_lte480wv_set_power(struct plat_lcd_data *pd,
  					unsigned int power)
  {
  	if (power) {
  #if !defined(CONFIG_BACKLIGHT_PWM)
2f4f0b421   Jingoo Han   ARM: S5PV210: Use...
150
  		gpio_request_one(S5PV210_GPD0(3), GPIOF_OUT_INIT_HIGH, "GPD0");
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
151
152
153
154
  		gpio_free(S5PV210_GPD0(3));
  #endif
  
  		/* fire nRESET on power up */
2f4f0b421   Jingoo Han   ARM: S5PV210: Use...
155
  		gpio_request_one(S5PV210_GPH0(6), GPIOF_OUT_INIT_HIGH, "GPH0");
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
156
157
158
159
160
161
162
163
164
165
  
  		gpio_set_value(S5PV210_GPH0(6), 0);
  		mdelay(10);
  
  		gpio_set_value(S5PV210_GPH0(6), 1);
  		mdelay(10);
  
  		gpio_free(S5PV210_GPH0(6));
  	} else {
  #if !defined(CONFIG_BACKLIGHT_PWM)
2f4f0b421   Jingoo Han   ARM: S5PV210: Use...
166
  		gpio_request_one(S5PV210_GPD0(3), GPIOF_OUT_INIT_LOW, "GPD0");
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
  		gpio_free(S5PV210_GPD0(3));
  #endif
  	}
  }
  
  static struct plat_lcd_data smdkv210_lcd_lte480wv_data = {
  	.set_power	= smdkv210_lte480wv_set_power,
  };
  
  static struct platform_device smdkv210_lcd_lte480wv = {
  	.name			= "platform-lcd",
  	.dev.parent		= &s3c_device_fb.dev,
  	.dev.platform_data	= &smdkv210_lcd_lte480wv_data,
  };
  
  static struct s3c_fb_pd_win smdkv210_fb_win0 = {
  	.win_mode = {
  		.left_margin	= 13,
  		.right_margin	= 8,
  		.upper_margin	= 7,
  		.lower_margin	= 5,
  		.hsync_len	= 3,
  		.vsync_len	= 1,
  		.xres		= 800,
  		.yres		= 480,
  	},
  	.max_bpp	= 32,
  	.default_bpp	= 24,
  };
  
  static struct s3c_fb_platdata smdkv210_lcd0_pdata __initdata = {
  	.win[0]		= &smdkv210_fb_win0,
  	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
  	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
  	.setup_gpio	= s5pv210_fb_gpio_setup_24bpp,
  };
981744165   Kukjin Kim   ARM: S5PV210: Add...
203
  static struct platform_device *smdkv210_devices[] __initdata = {
41d8289d1   Naveen Krishna Ch   ARM: S5PV210: Add...
204
  	&s3c_device_adc,
4b9a5ad56   Abhilash Kesavan   ARM: S5PV210: Add...
205
  	&s3c_device_cfcon,
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
206
  	&s3c_device_fb,
976a62f21   Hyuk Lee   ARM: S5PV210: Add...
207
208
209
210
  	&s3c_device_hsmmc0,
  	&s3c_device_hsmmc1,
  	&s3c_device_hsmmc2,
  	&s3c_device_hsmmc3,
170d7415d   Naveen Krishna Ch   ARM: S5PV210: Add...
211
212
213
  	&s3c_device_i2c0,
  	&s3c_device_i2c1,
  	&s3c_device_i2c2,
f5807269e   Atul Dahiya   ARM: S5PV210: Add...
214
  	&s3c_device_rtc,
41d8289d1   Naveen Krishna Ch   ARM: S5PV210: Add...
215
  	&s3c_device_ts,
5b7d7b22d   Banajit Goswami   ARM: S5PV210: Add...
216
  	&s3c_device_wdt,
0ae9a22b4   Kukjin Kim   Merge branch 'nex...
217
218
219
  	&s5pv210_device_ac97,
  	&s5pv210_device_iis0,
  	&s5pv210_device_spdif,
b9368f324   Jassi Brar   ARM: S5PV210: Add...
220
  	&samsung_asoc_dma,
2839cc1e7   Sangbeom Kim   ARM: SAMSUNG: Add...
221
  	&samsung_asoc_idma,
0ae9a22b4   Kukjin Kim   Merge branch 'nex...
222
  	&samsung_device_keypad,
9b580cdb1   Thomas Abraham   ARM: S5PV210: Add...
223
  	&smdkv210_dm9000,
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
224
  	&smdkv210_lcd_lte480wv,
41d8289d1   Naveen Krishna Ch   ARM: S5PV210: Add...
225
  };
9b580cdb1   Thomas Abraham   ARM: S5PV210: Add...
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
  static void __init smdkv210_dm9000_init(void)
  {
  	unsigned int tmp;
  
  	gpio_request(S5PV210_MP01(5), "nCS5");
  	s3c_gpio_cfgpin(S5PV210_MP01(5), S3C_GPIO_SFN(2));
  	gpio_free(S5PV210_MP01(5));
  
  	tmp = (5 << S5P_SROM_BCX__TACC__SHIFT);
  	__raw_writel(tmp, S5P_SROM_BC5);
  
  	tmp = __raw_readl(S5P_SROM_BW);
  	tmp &= (S5P_SROM_BW__CS_MASK << S5P_SROM_BW__NCS5__SHIFT);
  	tmp |= (1 << S5P_SROM_BW__NCS5__SHIFT);
  	__raw_writel(tmp, S5P_SROM_BW);
  }
170d7415d   Naveen Krishna Ch   ARM: S5PV210: Add...
242
243
  static struct i2c_board_info smdkv210_i2c_devs0[] __initdata = {
  	{ I2C_BOARD_INFO("24c08", 0x50), },     /* Samsung S524AD0XD1 */
d8710bc8d   Jassi Brar   ARM: S5PV210: Ena...
244
  	{ I2C_BOARD_INFO("wm8580", 0x1b), },
170d7415d   Naveen Krishna Ch   ARM: S5PV210: Add...
245
246
247
248
249
250
251
252
253
  };
  
  static struct i2c_board_info smdkv210_i2c_devs1[] __initdata = {
  	/* To Be Updated */
  };
  
  static struct i2c_board_info smdkv210_i2c_devs2[] __initdata = {
  	/* To Be Updated */
  };
84ca326c7   Banajit Goswami   ARM: S5PV210: Add...
254
255
256
257
258
259
260
261
  /* LCD Backlight data */
  static struct samsung_bl_gpio_info smdkv210_bl_gpio_info = {
  	.no = S5PV210_GPD0(3),
  	.func = S3C_GPIO_SFN(2),
  };
  
  static struct platform_pwm_backlight_data smdkv210_bl_data = {
  	.pwm_id = 3,
de611dd40   Jingoo Han   ARM: S5PV210: Set...
262
  	.pwm_period_ns = 1000,
84ca326c7   Banajit Goswami   ARM: S5PV210: Add...
263
  };
981744165   Kukjin Kim   ARM: S5PV210: Add...
264
265
  static void __init smdkv210_map_io(void)
  {
3fa754c29   Kukjin Kim   ARM: 7248/1: S5PV...
266
  	s5pv210_init_io(NULL, 0);
981744165   Kukjin Kim   ARM: S5PV210: Add...
267
268
  	s3c24xx_init_clocks(24000000);
  	s3c24xx_init_uarts(smdkv210_uartcfgs, ARRAY_SIZE(smdkv210_uartcfgs));
20780fcc4   Sangbeom Kim   ARM: S5P: Update ...
269
  	s5p_set_timer_source(S5P_PWM2, S5P_PWM4);
981744165   Kukjin Kim   ARM: S5PV210: Add...
270
271
272
273
  }
  
  static void __init smdkv210_machine_init(void)
  {
ea31fd433   Jongpill Lee   ARM: S5PV210: Add...
274
  	s3c_pm_init();
9b580cdb1   Thomas Abraham   ARM: S5PV210: Add...
275
  	smdkv210_dm9000_init();
88a1cc438   Naveen Krishna Ch   ARM: S5PV210: Add...
276
  	samsung_keypad_set_platdata(&smdkv210_keypad_data);
0804765af   Naveen Krishna Chatradhi   ARM: SAMSUNG: Rem...
277
  	s3c24xx_ts_set_platdata(NULL);
170d7415d   Naveen Krishna Ch   ARM: S5PV210: Add...
278
279
280
281
282
283
284
285
286
287
  
  	s3c_i2c0_set_platdata(NULL);
  	s3c_i2c1_set_platdata(NULL);
  	s3c_i2c2_set_platdata(NULL);
  	i2c_register_board_info(0, smdkv210_i2c_devs0,
  			ARRAY_SIZE(smdkv210_i2c_devs0));
  	i2c_register_board_info(1, smdkv210_i2c_devs1,
  			ARRAY_SIZE(smdkv210_i2c_devs1));
  	i2c_register_board_info(2, smdkv210_i2c_devs2,
  			ARRAY_SIZE(smdkv210_i2c_devs2));
4b9a5ad56   Abhilash Kesavan   ARM: S5PV210: Add...
288
  	s3c_ide_set_platdata(&smdkv210_ide_pdata);
8f49720d5   Thomas Abraham   ARM: S5PV210: Add...
289
  	s3c_fb_set_platdata(&smdkv210_lcd0_pdata);
84ca326c7   Banajit Goswami   ARM: S5PV210: Add...
290
  	samsung_bl_set(&smdkv210_bl_gpio_info, &smdkv210_bl_data);
981744165   Kukjin Kim   ARM: S5PV210: Add...
291
292
293
294
295
  	platform_add_devices(smdkv210_devices, ARRAY_SIZE(smdkv210_devices));
  }
  
  MACHINE_START(SMDKV210, "SMDKV210")
  	/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
02350a1f8   Nicolas Pitre   ARM: mach-s5pc100...
296
  	.atag_offset	= 0x100,
981744165   Kukjin Kim   ARM: S5PV210: Add...
297
  	.init_irq	= s5pv210_init_irq,
bb3a4ebe6   Jamie Iles   ARM: samsung: con...
298
  	.handle_irq	= vic_handle_irq,
981744165   Kukjin Kim   ARM: S5PV210: Add...
299
300
  	.map_io		= smdkv210_map_io,
  	.init_machine	= smdkv210_machine_init,
20780fcc4   Sangbeom Kim   ARM: S5P: Update ...
301
  	.timer		= &s5p_timer,
1f34f0e2f   Russell King   ARM: 7252/1: rest...
302
  	.restart	= s5pv210_restart,
981744165   Kukjin Kim   ARM: S5PV210: Add...
303
  MACHINE_END