diff options
Diffstat (limited to 'arch/arm/mach-exynos/mach-smdk4x12.c')
| -rw-r--r-- | arch/arm/mach-exynos/mach-smdk4x12.c | 83 | 
1 files changed, 77 insertions, 6 deletions
diff --git a/arch/arm/mach-exynos/mach-smdk4x12.c b/arch/arm/mach-exynos/mach-smdk4x12.c index fb09c70e195..b26beb13ebe 100644 --- a/arch/arm/mach-exynos/mach-smdk4x12.c +++ b/arch/arm/mach-exynos/mach-smdk4x12.c @@ -13,12 +13,14 @@  #include <linux/i2c.h>  #include <linux/input.h>  #include <linux/io.h> +#include <linux/lcd.h>  #include <linux/mfd/max8997.h>  #include <linux/mmc/host.h>  #include <linux/platform_device.h>  #include <linux/pwm_backlight.h>  #include <linux/regulator/machine.h>  #include <linux/serial_core.h> +#include <linux/platform_data/s3c-hsotg.h>  #include <asm/mach/arch.h>  #include <asm/hardware/gic.h> @@ -28,15 +30,18 @@  #include <plat/clock.h>  #include <plat/cpu.h>  #include <plat/devs.h> +#include <plat/fb.h>  #include <plat/gpio-cfg.h>  #include <plat/iic.h>  #include <plat/keypad.h>  #include <plat/mfc.h> +#include <plat/regs-fb.h>  #include <plat/regs-serial.h>  #include <plat/sdhci.h>  #include <mach/map.h> +#include <drm/exynos_drm.h>  #include "common.h"  /* Following are default values for UCON, ULCON and UFCON UART registers */ @@ -219,8 +224,10 @@ static struct platform_pwm_backlight_data smdk4x12_bl_data = {  static uint32_t smdk4x12_keymap[] __initdata = {  	/* KEY(row, col, keycode) */ -	KEY(1, 0, KEY_D), KEY(1, 1, KEY_A), KEY(1, 2, KEY_B), -	KEY(1, 3, KEY_E), KEY(1, 4, KEY_C) +	KEY(1, 3, KEY_1), KEY(1, 4, KEY_2), KEY(1, 5, KEY_3), +	KEY(1, 6, KEY_4), KEY(1, 7, KEY_5), +	KEY(2, 5, KEY_D), KEY(2, 6, KEY_A), KEY(2, 7, KEY_B), +	KEY(0, 7, KEY_E), KEY(0, 5, KEY_C)  };  static struct matrix_keymap_data smdk4x12_keymap_data __initdata = { @@ -230,10 +237,62 @@ static struct matrix_keymap_data smdk4x12_keymap_data __initdata = {  static struct samsung_keypad_platdata smdk4x12_keypad_data __initdata = {  	.keymap_data	= &smdk4x12_keymap_data, -	.rows		= 2, -	.cols		= 5, +	.rows		= 3, +	.cols		= 8,  }; +#ifdef CONFIG_DRM_EXYNOS +static struct exynos_drm_fimd_pdata drm_fimd_pdata = { +	.panel	= { +		.timing	= { +			.left_margin	= 8, +			.right_margin	= 8, +			.upper_margin	= 6, +			.lower_margin	= 6, +			.hsync_len	= 6, +			.vsync_len	= 4, +			.xres		= 480, +			.yres		= 800, +		}, +	}, +	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB, +	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC, +	.default_win	= 0, +	.bpp		= 32, +}; +#else +static struct s3c_fb_pd_win smdk4x12_fb_win0 = { +	.xres		= 480, +	.yres		= 800, +	.virtual_x	= 480, +	.virtual_y	= 800 * 2, +	.max_bpp	= 32, +	.default_bpp	= 24, +}; + +static struct fb_videomode smdk4x12_lcd_timing = { +	.left_margin	= 8, +	.right_margin	= 8, +	.upper_margin	= 6, +	.lower_margin	= 6, +	.hsync_len	= 6, +	.vsync_len	= 4, +	.xres		= 480, +	.yres		= 800, +}; + +static struct s3c_fb_platdata smdk4x12_lcd_pdata __initdata = { +	.win[0]		= &smdk4x12_fb_win0, +	.vtiming	= &smdk4x12_lcd_timing, +	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB, +	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC, +	.setup_gpio	= exynos4_fimd0_gpio_setup_24bpp, +}; +#endif + +/* USB OTG */ +static struct s3c_hsotg_plat smdk4x12_hsotg_pdata; +  static struct platform_device *smdk4x12_devices[] __initdata = {  	&s3c_device_hsmmc2,  	&s3c_device_hsmmc3, @@ -242,22 +301,25 @@ static struct platform_device *smdk4x12_devices[] __initdata = {  	&s3c_device_i2c3,  	&s3c_device_i2c7,  	&s3c_device_rtc, +	&s3c_device_usb_hsotg,  	&s3c_device_wdt,  	&s5p_device_fimc0,  	&s5p_device_fimc1,  	&s5p_device_fimc2,  	&s5p_device_fimc3,  	&s5p_device_fimc_md, +	&s5p_device_fimd0,  	&s5p_device_mfc,  	&s5p_device_mfc_l,  	&s5p_device_mfc_r, +#ifdef CONFIG_DRM_EXYNOS +	&exynos_device_drm, +#endif  	&samsung_device_keypad,  };  static void __init smdk4x12_map_io(void)  { -	clk_xusbxti.rate = 24000000; -  	exynos_init_io(NULL, 0);  	s3c24xx_init_clocks(clk_xusbxti.rate);  	s3c24xx_init_uarts(smdk4x12_uartcfgs, ARRAY_SIZE(smdk4x12_uartcfgs)); @@ -293,6 +355,15 @@ static void __init smdk4x12_machine_init(void)  	s3c_sdhci2_set_platdata(&smdk4x12_hsmmc2_pdata);  	s3c_sdhci3_set_platdata(&smdk4x12_hsmmc3_pdata); +	s3c_hsotg_set_platdata(&smdk4x12_hsotg_pdata); + +#ifdef CONFIG_DRM_EXYNOS +	s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata; +	exynos4_fimd0_gpio_setup_24bpp(); +#else +	s5p_fimd0_set_platdata(&smdk4x12_lcd_pdata); +#endif +  	platform_add_devices(smdk4x12_devices, ARRAY_SIZE(smdk4x12_devices));  }  |