diff options
Diffstat (limited to 'arch/arm/mach-exynos/mach-origen.c')
| -rw-r--r-- | arch/arm/mach-exynos/mach-origen.c | 37 | 
1 files changed, 37 insertions, 0 deletions
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c index b4d032d5c87..878d4c99142 100644 --- a/arch/arm/mach-exynos/mach-origen.c +++ b/arch/arm/mach-exynos/mach-origen.c @@ -20,6 +20,7 @@  #include <linux/regulator/machine.h>  #include <linux/mfd/max8997.h>  #include <linux/lcd.h> +#include <linux/rfkill-gpio.h>  #include <asm/mach/arch.h>  #include <asm/hardware/gic.h> @@ -235,6 +236,7 @@ static struct regulator_init_data __initdata max8997_ldo9_data = {  		.min_uV		= 2800000,  		.max_uV		= 2800000,  		.apply_uV	= 1, +		.always_on	= 1,  		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,  		.state_mem	= {  			.disabled	= 1, @@ -278,6 +280,7 @@ static struct regulator_init_data __initdata max8997_ldo14_data = {  		.min_uV		= 1800000,  		.max_uV		= 1800000,  		.apply_uV	= 1, +		.always_on	= 1,  		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,  		.state_mem	= {  			.disabled	= 1, @@ -293,6 +296,7 @@ static struct regulator_init_data __initdata max8997_ldo17_data = {  		.min_uV		= 3300000,  		.max_uV		= 3300000,  		.apply_uV	= 1, +		.always_on	= 1,  		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,  		.state_mem	= {  			.disabled	= 1, @@ -602,6 +606,23 @@ static struct s3c_fb_platdata origen_lcd_pdata __initdata = {  	.setup_gpio	= exynos4_fimd0_gpio_setup_24bpp,  }; +/* Bluetooth rfkill gpio platform data */ +struct rfkill_gpio_platform_data origen_bt_pdata = { +	.reset_gpio	= EXYNOS4_GPX2(2), +	.shutdown_gpio	= -1, +	.type		= RFKILL_TYPE_BLUETOOTH, +	.name		= "origen-bt", +}; + +/* Bluetooth Platform device */ +static struct platform_device origen_device_bluetooth = { +	.name		= "rfkill_gpio", +	.id		= -1, +	.dev		= { +		.platform_data	= &origen_bt_pdata, +	}, +}; +  static struct platform_device *origen_devices[] __initdata = {  	&s3c_device_hsmmc2,  	&s3c_device_hsmmc0, @@ -613,9 +634,12 @@ static struct platform_device *origen_devices[] __initdata = {  	&s5p_device_fimc1,  	&s5p_device_fimc2,  	&s5p_device_fimc3, +	&s5p_device_fimc_md,  	&s5p_device_fimd0, +	&s5p_device_g2d,  	&s5p_device_hdmi,  	&s5p_device_i2c_hdmiphy, +	&s5p_device_jpeg,  	&s5p_device_mfc,  	&s5p_device_mfc_l,  	&s5p_device_mfc_r, @@ -623,6 +647,7 @@ static struct platform_device *origen_devices[] __initdata = {  	&exynos4_device_ohci,  	&origen_device_gpiokeys,  	&origen_lcd_hv070wsa, +	&origen_device_bluetooth,  };  /* LCD Backlight data */ @@ -636,6 +661,16 @@ static struct platform_pwm_backlight_data origen_bl_data = {  	.pwm_period_ns	= 1000,  }; +static void __init origen_bt_setup(void) +{ +	gpio_request(EXYNOS4_GPA0(0), "GPIO BT_UART"); +	/* 4 UART Pins configuration */ +	s3c_gpio_cfgrange_nopull(EXYNOS4_GPA0(0), 4, S3C_GPIO_SFN(2)); +	/* Setup BT Reset, this gpio will be requesed by rfkill-gpio */ +	s3c_gpio_cfgpin(EXYNOS4_GPX2(2), S3C_GPIO_OUTPUT); +	s3c_gpio_setpull(EXYNOS4_GPX2(2), S3C_GPIO_PULL_NONE); +} +  static void s5p_tv_setup(void)  {  	/* Direct HPD to HDMI chip */ @@ -689,6 +724,8 @@ static void __init origen_machine_init(void)  	platform_add_devices(origen_devices, ARRAY_SIZE(origen_devices));  	samsung_bl_set(&origen_bl_gpio_info, &origen_bl_data); + +	origen_bt_setup();  }  MACHINE_START(ORIGEN, "ORIGEN")  |