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

Commit 2014f269 authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Tony Lindgren
Browse files

ARM: OMAP: zoom: Use pwm stack for lcd and keyboard backlight



Use pwm_leds driver for the keyboard light and pwm-backlight for the lcd
backlight control (instead of implementing the PWM driver part in the board
file).

Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 03784f22
Loading
Loading
Loading
Loading
+0 −56
Original line number Original line Diff line number Diff line
@@ -12,7 +12,6 @@
#include <linux/init.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <linux/gpio.h>
#include <linux/i2c/twl.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi.h>
#include <linux/platform_data/spi-omap2-mcspi.h>
#include <linux/platform_data/spi-omap2-mcspi.h>
#include <video/omapdss.h>
#include <video/omapdss.h>
@@ -49,59 +48,6 @@ static void zoom_panel_disable_lcd(struct omap_dss_device *dssdev)
{
{
}
}


/* Register offsets in TWL4030_MODULE_INTBR */
#define TWL_INTBR_PMBR1	0xD
#define TWL_INTBR_GPBR1	0xC

/* Register offsets in TWL_MODULE_PWM */
#define TWL_LED_PWMON	0x3
#define TWL_LED_PWMOFF	0x4

static int zoom_set_bl_intensity(struct omap_dss_device *dssdev, int level)
{
#ifdef CONFIG_TWL4030_CORE
	unsigned char c;
	u8 mux_pwm, enb_pwm;

	if (level > 100)
		return -1;

	twl_i2c_read_u8(TWL4030_MODULE_INTBR, &mux_pwm, TWL_INTBR_PMBR1);
	twl_i2c_read_u8(TWL4030_MODULE_INTBR, &enb_pwm, TWL_INTBR_GPBR1);

	if (level == 0) {
		/* disable pwm1 output and clock */
		enb_pwm = enb_pwm & 0xF5;
		/* change pwm1 pin to gpio pin */
		mux_pwm = mux_pwm & 0xCF;
		twl_i2c_write_u8(TWL4030_MODULE_INTBR,
					enb_pwm, TWL_INTBR_GPBR1);
		twl_i2c_write_u8(TWL4030_MODULE_INTBR,
					mux_pwm, TWL_INTBR_PMBR1);
		return 0;
	}

	if (!((enb_pwm & 0xA) && (mux_pwm & 0x30))) {
		/* change gpio pin to pwm1 pin */
		mux_pwm = mux_pwm | 0x30;
		/* enable pwm1 output and clock*/
		enb_pwm = enb_pwm | 0x0A;
		twl_i2c_write_u8(TWL4030_MODULE_INTBR,
					mux_pwm, TWL_INTBR_PMBR1);
		twl_i2c_write_u8(TWL4030_MODULE_INTBR,
					enb_pwm, TWL_INTBR_GPBR1);
	}

	c = ((50 * (100 - level)) / 100) + 1;
	twl_i2c_write_u8(TWL_MODULE_PWM, 0x7F, TWL_LED_PWMOFF);
	twl_i2c_write_u8(TWL_MODULE_PWM, c, TWL_LED_PWMON);
#else
	pr_warn("Backlight not enabled\n");
#endif

	return 0;
}

static struct omap_dss_device zoom_lcd_device = {
static struct omap_dss_device zoom_lcd_device = {
	.name			= "lcd",
	.name			= "lcd",
	.driver_name		= "NEC_8048_panel",
	.driver_name		= "NEC_8048_panel",
@@ -109,8 +55,6 @@ static struct omap_dss_device zoom_lcd_device = {
	.phy.dpi.data_lines	= 24,
	.phy.dpi.data_lines	= 24,
	.platform_enable	= zoom_panel_enable_lcd,
	.platform_enable	= zoom_panel_enable_lcd,
	.platform_disable	= zoom_panel_disable_lcd,
	.platform_disable	= zoom_panel_disable_lcd,
	.max_backlight_level	= 100,
	.set_backlight		= zoom_set_bl_intensity,
};
};


static struct omap_dss_device *zoom_dss_devices[] = {
static struct omap_dss_device *zoom_dss_devices[] = {
+52 −1
Original line number Original line Diff line number Diff line
@@ -22,6 +22,9 @@
#include <linux/platform_data/gpio-omap.h>
#include <linux/platform_data/gpio-omap.h>
#include <linux/platform_data/omap-twl4030.h>
#include <linux/platform_data/omap-twl4030.h>
#include <linux/usb/phy.h>
#include <linux/usb/phy.h>
#include <linux/pwm.h>
#include <linux/leds_pwm.h>
#include <linux/pwm_backlight.h>


#include <asm/mach-types.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
@@ -193,6 +196,53 @@ static struct platform_device omap_vwlan_device = {
	},
	},
};
};


static struct pwm_lookup zoom_pwm_lookup[] = {
	PWM_LOOKUP("twl-pwm", 0, "leds_pwm", "zoom::keypad"),
	PWM_LOOKUP("twl-pwm", 1, "pwm-backlight", "backlight"),
};

static struct led_pwm zoom_pwm_leds[] = {
	{
		.name		= "zoom::keypad",
		.max_brightness	= 127,
		.pwm_period_ns	= 7812500,
	},
};

static struct led_pwm_platform_data zoom_pwm_data = {
	.num_leds	= ARRAY_SIZE(zoom_pwm_leds),
	.leds		= zoom_pwm_leds,
};

static struct platform_device zoom_leds_pwm = {
	.name	= "leds_pwm",
	.id	= -1,
	.dev	= {
		.platform_data = &zoom_pwm_data,
	},
};

static struct platform_pwm_backlight_data zoom_backlight_data = {
	.pwm_id = 1,
	.max_brightness = 127,
	.dft_brightness = 127,
	.pwm_period_ns = 7812500,
};

static struct platform_device zoom_backlight_pwm = {
	.name   = "pwm-backlight",
	.id     = -1,
	.dev    = {
		.platform_data = &zoom_backlight_data,
	},
};

static struct platform_device *zoom_devices[] __initdata = {
	&omap_vwlan_device,
	&zoom_leds_pwm,
	&zoom_backlight_pwm,
};

static struct wl12xx_platform_data omap_zoom_wlan_data __initdata = {
static struct wl12xx_platform_data omap_zoom_wlan_data __initdata = {
	.board_ref_clock = WL12XX_REFCLOCK_26, /* 26 MHz */
	.board_ref_clock = WL12XX_REFCLOCK_26, /* 26 MHz */
};
};
@@ -301,7 +351,8 @@ void __init zoom_peripherals_init(void)


	omap_hsmmc_init(mmc);
	omap_hsmmc_init(mmc);
	omap_i2c_init();
	omap_i2c_init();
	platform_device_register(&omap_vwlan_device);
	pwm_add_table(zoom_pwm_lookup, ARRAY_SIZE(zoom_pwm_lookup));
	platform_add_devices(zoom_devices, ARRAY_SIZE(zoom_devices));
	usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
	usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
	usb_musb_init(NULL);
	usb_musb_init(NULL);
	enable_board_wakeup_source();
	enable_board_wakeup_source();