Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit baa0c060 authored by Banajit Goswami's avatar Banajit Goswami Committed by Kukjin Kim
Browse files

ARM: SAMSUNG: Add PWM backlight support on Samsung S5PC100



This patch adds support for LCD backlight using PWM timer for
Samsung SMDKC100 board.

Signed-off-by: default avatarBanajit Goswami <banajit.g@samsung.com>
Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
parent b0fd644f
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -58,6 +58,7 @@ config MACH_SMDKC100
	select SAMSUNG_DEV_ADC
	select SAMSUNG_DEV_ADC
	select SAMSUNG_DEV_IDE
	select SAMSUNG_DEV_IDE
	select SAMSUNG_DEV_KEYPAD
	select SAMSUNG_DEV_KEYPAD
	select SAMSUNG_DEV_PWM
	select SAMSUNG_DEV_TS
	select SAMSUNG_DEV_TS
	select S5PC100_SETUP_FB_24BPP
	select S5PC100_SETUP_FB_24BPP
	select S5PC100_SETUP_I2C1
	select S5PC100_SETUP_I2C1
+44 −4
Original line number Original line Diff line number Diff line
@@ -23,12 +23,15 @@
#include <linux/fb.h>
#include <linux/fb.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/input.h>
#include <linux/input.h>
#include <linux/pwm_backlight.h>


#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/map.h>


#include <mach/map.h>
#include <mach/map.h>
#include <mach/regs-fb.h>
#include <mach/regs-fb.h>
#include <mach/regs-gpio.h>

#include <video/platform_lcd.h>
#include <video/platform_lcd.h>


#include <asm/irq.h>
#include <asm/irq.h>
@@ -107,9 +110,6 @@ static struct i2c_board_info i2c_devs1[] __initdata = {
static void smdkc100_lcd_power_set(struct plat_lcd_data *pd,
static void smdkc100_lcd_power_set(struct plat_lcd_data *pd,
				   unsigned int power)
				   unsigned int power)
{
{
	/* backlight */
	gpio_direction_output(S5PC100_GPD(0), power);

	if (power) {
	if (power) {
		/* module reset */
		/* module reset */
		gpio_direction_output(S5PC100_GPH0(6), 1);
		gpio_direction_output(S5PC100_GPH0(6), 1);
@@ -179,6 +179,45 @@ static struct samsung_keypad_platdata smdkc100_keypad_data __initdata = {
	.cols		= 8,
	.cols		= 8,
};
};


static int smdkc100_backlight_init(struct device *dev)
{
	int ret;

	ret = gpio_request(S5PC100_GPD(0), "Backlight");
	if (ret) {
		printk(KERN_ERR "failed to request GPF for PWM-OUT0\n");
		return ret;
	}

	/* Configure GPIO pin with S5PC100_GPD_TOUT_0 */
	s3c_gpio_cfgpin(S5PC100_GPD(0), S3C_GPIO_SFN(2));

	return 0;
}

static void smdkc100_backlight_exit(struct device *dev)
{
	s3c_gpio_cfgpin(S5PC100_GPD(0), S3C_GPIO_OUTPUT);
	gpio_free(S5PC100_GPD(0));
}

static struct platform_pwm_backlight_data smdkc100_backlight_data = {
	.pwm_id		= 0,
	.max_brightness	= 255,
	.dft_brightness	= 255,
	.pwm_period_ns	= 78770,
	.init		= smdkc100_backlight_init,
	.exit		= smdkc100_backlight_exit,
};

static struct platform_device smdkc100_backlight_device = {
	.name		= "pwm-backlight",
	.dev		= {
		.parent		= &s3c_device_timer[0].dev,
		.platform_data	= &smdkc100_backlight_data,
	},
};

static struct platform_device *smdkc100_devices[] __initdata = {
static struct platform_device *smdkc100_devices[] __initdata = {
	&s3c_device_adc,
	&s3c_device_adc,
	&s3c_device_cfcon,
	&s3c_device_cfcon,
@@ -200,6 +239,8 @@ static struct platform_device *smdkc100_devices[] __initdata = {
	&s5p_device_fimc1,
	&s5p_device_fimc1,
	&s5p_device_fimc2,
	&s5p_device_fimc2,
	&s5pc100_device_spdif,
	&s5pc100_device_spdif,
	&s3c_device_timer[0],
	&smdkc100_backlight_device,
};
};


static struct s3c2410_ts_mach_info s3c_ts_platform __initdata = {
static struct s3c2410_ts_mach_info s3c_ts_platform __initdata = {
@@ -233,7 +274,6 @@ static void __init smdkc100_machine_init(void)
	s5pc100_spdif_setup_gpio(S5PC100_SPDIF_GPD);
	s5pc100_spdif_setup_gpio(S5PC100_SPDIF_GPD);


	/* LCD init */
	/* LCD init */
	gpio_request(S5PC100_GPD(0), "GPD");
	gpio_request(S5PC100_GPH0(6), "GPH0");
	gpio_request(S5PC100_GPH0(6), "GPH0");
	smdkc100_lcd_power_set(&smdkc100_lcd_power_data, 0);
	smdkc100_lcd_power_set(&smdkc100_lcd_power_data, 0);
	platform_add_devices(smdkc100_devices, ARRAY_SIZE(smdkc100_devices));
	platform_add_devices(smdkc100_devices, ARRAY_SIZE(smdkc100_devices));