Linux Audio

Check our new training course

Loading...
v3.15
  1/* linux/arch/arm/mach-s3c2416/mach-hanlin_v3c.c
  2 *
  3 * Copyright (c) 2009 Yauhen Kharuzhy <jekhor@gmail.com>,
  4 *	as part of OpenInkpot project
  5 * Copyright (c) 2009 Promwad Innovation Company
  6 *	Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com>
  7 *
  8 * This program is free software; you can redistribute it and/or modify
  9 * it under the terms of the GNU General Public License version 2 as
 10 * published by the Free Software Foundation.
 11 *
 12*/
 13
 14#include <linux/kernel.h>
 15#include <linux/types.h>
 16#include <linux/interrupt.h>
 17#include <linux/list.h>
 18#include <linux/timer.h>
 19#include <linux/init.h>
 20#include <linux/serial_core.h>
 21#include <linux/serial_s3c.h>
 22#include <linux/platform_device.h>
 23#include <linux/io.h>
 24#include <linux/mtd/partitions.h>
 25#include <linux/gpio.h>
 26#include <linux/fb.h>
 27#include <linux/delay.h>
 28
 29#include <asm/mach/arch.h>
 30#include <asm/mach/map.h>
 31#include <asm/mach/irq.h>
 32
 33#include <video/samsung_fimd.h>
 34#include <mach/hardware.h>
 35#include <asm/irq.h>
 36#include <asm/mach-types.h>
 37
 38#include <mach/regs-gpio.h>
 39#include <mach/regs-lcd.h>
 40#include <mach/regs-s3c2443-clock.h>
 41#include <mach/gpio-samsung.h>
 42
 43#include <linux/platform_data/leds-s3c24xx.h>
 44#include <linux/platform_data/i2c-s3c2410.h>
 45
 46#include <plat/gpio-cfg.h>
 47#include <plat/clock.h>
 48#include <plat/devs.h>
 49#include <plat/cpu.h>
 50#include <linux/platform_data/mtd-nand-s3c2410.h>
 51#include <plat/sdhci.h>
 52#include <linux/platform_data/usb-s3c2410_udc.h>
 53#include <linux/platform_data/s3c-hsudc.h>
 54#include <plat/samsung-time.h>
 55
 56#include <plat/fb.h>
 57
 58#include "common.h"
 59#include "common-smdk.h"
 60
 61static struct map_desc smdk2416_iodesc[] __initdata = {
 62	/* ISA IO Space map (memory space selected by A24) */
 63
 64	{
 65		.virtual	= (u32)S3C24XX_VA_ISA_WORD,
 66		.pfn		= __phys_to_pfn(S3C2410_CS2),
 67		.length		= 0x10000,
 68		.type		= MT_DEVICE,
 69	}, {
 70		.virtual	= (u32)S3C24XX_VA_ISA_WORD + 0x10000,
 71		.pfn		= __phys_to_pfn(S3C2410_CS2 + (1<<24)),
 72		.length		= SZ_4M,
 73		.type		= MT_DEVICE,
 74	}, {
 75		.virtual	= (u32)S3C24XX_VA_ISA_BYTE,
 76		.pfn		= __phys_to_pfn(S3C2410_CS2),
 77		.length		= 0x10000,
 78		.type		= MT_DEVICE,
 79	}, {
 80		.virtual	= (u32)S3C24XX_VA_ISA_BYTE + 0x10000,
 81		.pfn		= __phys_to_pfn(S3C2410_CS2 + (1<<24)),
 82		.length		= SZ_4M,
 83		.type		= MT_DEVICE,
 84	}
 85};
 86
 87#define UCON (S3C2410_UCON_DEFAULT	| \
 88		S3C2440_UCON_PCLK	| \
 89		S3C2443_UCON_RXERR_IRQEN)
 90
 91#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE)
 92
 93#define UFCON (S3C2410_UFCON_RXTRIG8	| \
 94		S3C2410_UFCON_FIFOMODE	| \
 95		S3C2440_UFCON_TXTRIG16)
 96
 97static struct s3c2410_uartcfg smdk2416_uartcfgs[] __initdata = {
 98	[0] = {
 99		.hwport	     = 0,
100		.flags	     = 0,
101		.ucon	     = UCON,
102		.ulcon	     = ULCON,
103		.ufcon	     = UFCON,
104	},
105	[1] = {
106		.hwport	     = 1,
107		.flags	     = 0,
108		.ucon	     = UCON,
109		.ulcon	     = ULCON,
110		.ufcon	     = UFCON,
111	},
112	/* IR port */
113	[2] = {
114		.hwport	     = 2,
115		.flags	     = 0,
116		.ucon	     = UCON,
117		.ulcon	     = ULCON | 0x50,
118		.ufcon	     = UFCON,
119	},
120	[3] = {
121		.hwport	     = 3,
122		.flags	     = 0,
123		.ucon	     = UCON,
124		.ulcon	     = ULCON,
125		.ufcon	     = UFCON,
126	}
127};
128
129static void smdk2416_hsudc_gpio_init(void)
130{
131	s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_UP);
132	s3c_gpio_setpull(S3C2410_GPF(2), S3C_GPIO_PULL_NONE);
133	s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(1));
134	s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 0);
135}
136
137static void smdk2416_hsudc_gpio_uninit(void)
138{
139	s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 1);
140	s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_NONE);
141	s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(0));
142}
143
144static struct s3c24xx_hsudc_platdata smdk2416_hsudc_platdata = {
145	.epnum = 9,
146	.gpio_init = smdk2416_hsudc_gpio_init,
147	.gpio_uninit = smdk2416_hsudc_gpio_uninit,
148};
149
150static struct s3c_fb_pd_win smdk2416_fb_win[] = {
151	[0] = {
152		.default_bpp	= 16,
153		.max_bpp	= 32,
154		.xres           = 800,
155		.yres           = 480,
156	},
157};
158
159static struct fb_videomode smdk2416_lcd_timing = {
160	.pixclock	= 41094,
161	.left_margin	= 8,
162	.right_margin	= 13,
163	.upper_margin	= 7,
164	.lower_margin	= 5,
165	.hsync_len	= 3,
166	.vsync_len	= 1,
167	.xres           = 800,
168	.yres           = 480,
169};
170
171static void s3c2416_fb_gpio_setup_24bpp(void)
172{
173	unsigned int gpio;
174
175	for (gpio = S3C2410_GPC(1); gpio <= S3C2410_GPC(4); gpio++) {
176		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
177		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
178	}
179
180	for (gpio = S3C2410_GPC(8); gpio <= S3C2410_GPC(15); gpio++) {
181		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
182		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
183	}
184
185	for (gpio = S3C2410_GPD(0); gpio <= S3C2410_GPD(15); gpio++) {
186		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
187		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
188	}
189}
190
191static struct s3c_fb_platdata smdk2416_fb_platdata = {
192	.win[0]		= &smdk2416_fb_win[0],
193	.vtiming	= &smdk2416_lcd_timing,
194	.setup_gpio	= s3c2416_fb_gpio_setup_24bpp,
195	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
196	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
197};
198
199static struct s3c_sdhci_platdata smdk2416_hsmmc0_pdata __initdata = {
200	.max_width		= 4,
201	.cd_type		= S3C_SDHCI_CD_GPIO,
202	.ext_cd_gpio		= S3C2410_GPF(1),
203	.ext_cd_gpio_invert	= 1,
204};
205
206static struct s3c_sdhci_platdata smdk2416_hsmmc1_pdata __initdata = {
207	.max_width		= 4,
208	.cd_type		= S3C_SDHCI_CD_NONE,
209};
210
211static struct platform_device *smdk2416_devices[] __initdata = {
212	&s3c_device_fb,
213	&s3c_device_wdt,
214	&s3c_device_ohci,
215	&s3c_device_i2c0,
216	&s3c_device_hsmmc0,
217	&s3c_device_hsmmc1,
218	&s3c_device_usb_hsudc,
219	&s3c2443_device_dma,
220};
221
 
 
 
 
 
 
222static void __init smdk2416_map_io(void)
223{
224	s3c24xx_init_io(smdk2416_iodesc, ARRAY_SIZE(smdk2416_iodesc));
225	s3c24xx_init_clocks(12000000);
226	s3c24xx_init_uarts(smdk2416_uartcfgs, ARRAY_SIZE(smdk2416_uartcfgs));
227	samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
228}
229
230static void __init smdk2416_machine_init(void)
231{
232	s3c_i2c0_set_platdata(NULL);
233	s3c_fb_set_platdata(&smdk2416_fb_platdata);
234
235	s3c_sdhci0_set_platdata(&smdk2416_hsmmc0_pdata);
236	s3c_sdhci1_set_platdata(&smdk2416_hsmmc1_pdata);
237
238	s3c24xx_hsudc_set_platdata(&smdk2416_hsudc_platdata);
239
240	gpio_request(S3C2410_GPB(4), "USBHost Power");
241	gpio_direction_output(S3C2410_GPB(4), 1);
242
243	gpio_request(S3C2410_GPB(3), "Display Power");
244	gpio_direction_output(S3C2410_GPB(3), 1);
245
246	gpio_request(S3C2410_GPB(1), "Display Reset");
247	gpio_direction_output(S3C2410_GPB(1), 1);
248
249	platform_add_devices(smdk2416_devices, ARRAY_SIZE(smdk2416_devices));
250	smdk_machine_init();
251}
252
253MACHINE_START(SMDK2416, "SMDK2416")
254	/* Maintainer: Yauhen Kharuzhy <jekhor@gmail.com> */
255	.atag_offset	= 0x100,
256
257	.init_irq	= s3c2416_init_irq,
258	.map_io		= smdk2416_map_io,
259	.init_machine	= smdk2416_machine_init,
260	.init_time	= samsung_timer_init,
261	.restart	= s3c2416_restart,
262MACHINE_END
v4.17
  1// SPDX-License-Identifier: GPL-2.0
  2//
  3// Copyright (c) 2009 Yauhen Kharuzhy <jekhor@gmail.com>,
  4//	as part of OpenInkpot project
  5// Copyright (c) 2009 Promwad Innovation Company
  6//	Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com>
 
 
 
 
 
 
  7
  8#include <linux/kernel.h>
  9#include <linux/types.h>
 10#include <linux/interrupt.h>
 11#include <linux/list.h>
 12#include <linux/timer.h>
 13#include <linux/init.h>
 14#include <linux/serial_core.h>
 15#include <linux/serial_s3c.h>
 16#include <linux/platform_device.h>
 17#include <linux/io.h>
 18#include <linux/mtd/partitions.h>
 19#include <linux/gpio.h>
 20#include <linux/fb.h>
 21#include <linux/delay.h>
 22
 23#include <asm/mach/arch.h>
 24#include <asm/mach/map.h>
 25#include <asm/mach/irq.h>
 26
 27#include <video/samsung_fimd.h>
 28#include <mach/hardware.h>
 29#include <asm/irq.h>
 30#include <asm/mach-types.h>
 31
 32#include <mach/regs-gpio.h>
 33#include <mach/regs-lcd.h>
 34#include <mach/regs-s3c2443-clock.h>
 35#include <mach/gpio-samsung.h>
 36
 37#include <linux/platform_data/leds-s3c24xx.h>
 38#include <linux/platform_data/i2c-s3c2410.h>
 39
 40#include <plat/gpio-cfg.h>
 
 41#include <plat/devs.h>
 42#include <plat/cpu.h>
 43#include <linux/platform_data/mtd-nand-s3c2410.h>
 44#include <plat/sdhci.h>
 45#include <linux/platform_data/usb-s3c2410_udc.h>
 46#include <linux/platform_data/s3c-hsudc.h>
 47#include <plat/samsung-time.h>
 48
 49#include <plat/fb.h>
 50
 51#include "common.h"
 52#include "common-smdk.h"
 53
 54static struct map_desc smdk2416_iodesc[] __initdata = {
 55	/* ISA IO Space map (memory space selected by A24) */
 56
 57	{
 58		.virtual	= (u32)S3C24XX_VA_ISA_WORD,
 59		.pfn		= __phys_to_pfn(S3C2410_CS2),
 60		.length		= 0x10000,
 61		.type		= MT_DEVICE,
 62	}, {
 63		.virtual	= (u32)S3C24XX_VA_ISA_WORD + 0x10000,
 64		.pfn		= __phys_to_pfn(S3C2410_CS2 + (1<<24)),
 65		.length		= SZ_4M,
 66		.type		= MT_DEVICE,
 67	}, {
 68		.virtual	= (u32)S3C24XX_VA_ISA_BYTE,
 69		.pfn		= __phys_to_pfn(S3C2410_CS2),
 70		.length		= 0x10000,
 71		.type		= MT_DEVICE,
 72	}, {
 73		.virtual	= (u32)S3C24XX_VA_ISA_BYTE + 0x10000,
 74		.pfn		= __phys_to_pfn(S3C2410_CS2 + (1<<24)),
 75		.length		= SZ_4M,
 76		.type		= MT_DEVICE,
 77	}
 78};
 79
 80#define UCON (S3C2410_UCON_DEFAULT	| \
 81		S3C2440_UCON_PCLK	| \
 82		S3C2443_UCON_RXERR_IRQEN)
 83
 84#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE)
 85
 86#define UFCON (S3C2410_UFCON_RXTRIG8	| \
 87		S3C2410_UFCON_FIFOMODE	| \
 88		S3C2440_UFCON_TXTRIG16)
 89
 90static struct s3c2410_uartcfg smdk2416_uartcfgs[] __initdata = {
 91	[0] = {
 92		.hwport	     = 0,
 93		.flags	     = 0,
 94		.ucon	     = UCON,
 95		.ulcon	     = ULCON,
 96		.ufcon	     = UFCON,
 97	},
 98	[1] = {
 99		.hwport	     = 1,
100		.flags	     = 0,
101		.ucon	     = UCON,
102		.ulcon	     = ULCON,
103		.ufcon	     = UFCON,
104	},
105	/* IR port */
106	[2] = {
107		.hwport	     = 2,
108		.flags	     = 0,
109		.ucon	     = UCON,
110		.ulcon	     = ULCON | 0x50,
111		.ufcon	     = UFCON,
112	},
113	[3] = {
114		.hwport	     = 3,
115		.flags	     = 0,
116		.ucon	     = UCON,
117		.ulcon	     = ULCON,
118		.ufcon	     = UFCON,
119	}
120};
121
122static void smdk2416_hsudc_gpio_init(void)
123{
124	s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_UP);
125	s3c_gpio_setpull(S3C2410_GPF(2), S3C_GPIO_PULL_NONE);
126	s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(1));
127	s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 0);
128}
129
130static void smdk2416_hsudc_gpio_uninit(void)
131{
132	s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 1);
133	s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_NONE);
134	s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(0));
135}
136
137static struct s3c24xx_hsudc_platdata smdk2416_hsudc_platdata = {
138	.epnum = 9,
139	.gpio_init = smdk2416_hsudc_gpio_init,
140	.gpio_uninit = smdk2416_hsudc_gpio_uninit,
141};
142
143static struct s3c_fb_pd_win smdk2416_fb_win[] = {
144	[0] = {
145		.default_bpp	= 16,
146		.max_bpp	= 32,
147		.xres           = 800,
148		.yres           = 480,
149	},
150};
151
152static struct fb_videomode smdk2416_lcd_timing = {
153	.pixclock	= 41094,
154	.left_margin	= 8,
155	.right_margin	= 13,
156	.upper_margin	= 7,
157	.lower_margin	= 5,
158	.hsync_len	= 3,
159	.vsync_len	= 1,
160	.xres           = 800,
161	.yres           = 480,
162};
163
164static void s3c2416_fb_gpio_setup_24bpp(void)
165{
166	unsigned int gpio;
167
168	for (gpio = S3C2410_GPC(1); gpio <= S3C2410_GPC(4); gpio++) {
169		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
170		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
171	}
172
173	for (gpio = S3C2410_GPC(8); gpio <= S3C2410_GPC(15); gpio++) {
174		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
175		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
176	}
177
178	for (gpio = S3C2410_GPD(0); gpio <= S3C2410_GPD(15); gpio++) {
179		s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
180		s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
181	}
182}
183
184static struct s3c_fb_platdata smdk2416_fb_platdata = {
185	.win[0]		= &smdk2416_fb_win[0],
186	.vtiming	= &smdk2416_lcd_timing,
187	.setup_gpio	= s3c2416_fb_gpio_setup_24bpp,
188	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
189	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
190};
191
192static struct s3c_sdhci_platdata smdk2416_hsmmc0_pdata __initdata = {
193	.max_width		= 4,
194	.cd_type		= S3C_SDHCI_CD_GPIO,
195	.ext_cd_gpio		= S3C2410_GPF(1),
196	.ext_cd_gpio_invert	= 1,
197};
198
199static struct s3c_sdhci_platdata smdk2416_hsmmc1_pdata __initdata = {
200	.max_width		= 4,
201	.cd_type		= S3C_SDHCI_CD_NONE,
202};
203
204static struct platform_device *smdk2416_devices[] __initdata = {
205	&s3c_device_fb,
206	&s3c_device_wdt,
207	&s3c_device_ohci,
208	&s3c_device_i2c0,
209	&s3c_device_hsmmc0,
210	&s3c_device_hsmmc1,
211	&s3c_device_usb_hsudc,
212	&s3c2443_device_dma,
213};
214
215static void __init smdk2416_init_time(void)
216{
217	s3c2416_init_clocks(12000000);
218	samsung_timer_init();
219}
220
221static void __init smdk2416_map_io(void)
222{
223	s3c24xx_init_io(smdk2416_iodesc, ARRAY_SIZE(smdk2416_iodesc));
 
224	s3c24xx_init_uarts(smdk2416_uartcfgs, ARRAY_SIZE(smdk2416_uartcfgs));
225	samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
226}
227
228static void __init smdk2416_machine_init(void)
229{
230	s3c_i2c0_set_platdata(NULL);
231	s3c_fb_set_platdata(&smdk2416_fb_platdata);
232
233	s3c_sdhci0_set_platdata(&smdk2416_hsmmc0_pdata);
234	s3c_sdhci1_set_platdata(&smdk2416_hsmmc1_pdata);
235
236	s3c24xx_hsudc_set_platdata(&smdk2416_hsudc_platdata);
237
238	gpio_request(S3C2410_GPB(4), "USBHost Power");
239	gpio_direction_output(S3C2410_GPB(4), 1);
240
241	gpio_request(S3C2410_GPB(3), "Display Power");
242	gpio_direction_output(S3C2410_GPB(3), 1);
243
244	gpio_request(S3C2410_GPB(1), "Display Reset");
245	gpio_direction_output(S3C2410_GPB(1), 1);
246
247	platform_add_devices(smdk2416_devices, ARRAY_SIZE(smdk2416_devices));
248	smdk_machine_init();
249}
250
251MACHINE_START(SMDK2416, "SMDK2416")
252	/* Maintainer: Yauhen Kharuzhy <jekhor@gmail.com> */
253	.atag_offset	= 0x100,
254
255	.init_irq	= s3c2416_init_irq,
256	.map_io		= smdk2416_map_io,
257	.init_machine	= smdk2416_machine_init,
258	.init_time	= smdk2416_init_time,
 
259MACHINE_END