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

Commit ae6cdb03 authored by Alexander Shiyan's avatar Alexander Shiyan Committed by Bryan Wu
Browse files

leds: leds-mc13783: Add MC13892 LED support

parent 9d263813
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -388,12 +388,12 @@ config LEDS_DELL_NETBOOKS
	  notebooks that have an external LED.

config LEDS_MC13783
	tristate "LED Support for MC13783 PMIC"
	tristate "LED Support for MC13XXX PMIC"
	depends on LEDS_CLASS
	depends on MFD_MC13783
	depends on MFD_MC13XXX
	help
	  This option enable support for on-chip LED drivers found
	  on Freescale Semiconductor MC13783 PMIC.
	  on Freescale Semiconductor MC13783/MC13892 PMIC.

config LEDS_NS2
	tristate "LED support for Network Space v2 GPIO LEDs"
+59 −1
Original line number Diff line number Diff line
/*
 * LEDs driver for Freescale MC13783
 * LEDs driver for Freescale MC13783/MC13892
 *
 * Copyright (C) 2010 Philippe Rétornaz
 *
@@ -85,6 +85,34 @@ static void mc13xxx_led_work(struct work_struct *work)
		value = led->new_brightness >> 3;
		mask = 0x1f;
		break;
	case MC13892_LED_MD:
		reg = MC13XXX_REG_LED_CONTROL(0);
		shift = 3;
		mask = 0x3f;
		value = led->new_brightness >> 2;
		break;
	case MC13892_LED_AD:
		reg = MC13XXX_REG_LED_CONTROL(0);
		shift = 15;
		mask = 0x3f;
		value = led->new_brightness >> 2;
		break;
	case MC13892_LED_KP:
		reg = MC13XXX_REG_LED_CONTROL(1);
		shift = 3;
		mask = 0x3f;
		value = led->new_brightness >> 2;
		break;
	case MC13892_LED_R:
	case MC13892_LED_G:
	case MC13892_LED_B:
		off = led->id - MC13892_LED_R;
		bank = off / 2;
		reg = MC13XXX_REG_LED_CONTROL(2) + bank;
		shift = (off - bank * 2) * 12 + 3;
		value = led->new_brightness >> 2;
		mask = 0x3f;
		break;
	default:
		BUG();
	}
@@ -138,6 +166,29 @@ static int __init mc13xxx_led_setup(struct mc13xxx_led *led, int max_current)
		shift = ((led->id - MC13783_LED_R1) - bank * 3) * 2;
		mask = 0x03;
		break;
	case MC13892_LED_MD:
		reg = MC13XXX_REG_LED_CONTROL(0);
		shift = 9;
		mask = 0x07;
		break;
	case MC13892_LED_AD:
		reg = MC13XXX_REG_LED_CONTROL(0);
		shift = 21;
		mask = 0x07;
		break;
	case MC13892_LED_KP:
		reg = MC13XXX_REG_LED_CONTROL(1);
		shift = 9;
		mask = 0x07;
		break;
	case MC13892_LED_R:
	case MC13892_LED_G:
	case MC13892_LED_B:
		bank = (led->id - MC13892_LED_R) / 2;
		reg = MC13XXX_REG_LED_CONTROL(2) + bank;
		shift = ((led->id - MC13892_LED_R) - bank * 2) * 12 + 9;
		mask = 0x07;
		break;
	default:
		BUG();
	}
@@ -276,8 +327,15 @@ static const struct mc13xxx_led_devtype mc13783_led_devtype = {
	.num_regs	= 6,
};

static const struct mc13xxx_led_devtype mc13892_led_devtype = {
	.led_min	= MC13892_LED_MD,
	.led_max	= MC13892_LED_B,
	.num_regs	= 4,
};

static const struct platform_device_id mc13xxx_led_id_table[] = {
	{ "mc13783-led", (kernel_ulong_t)&mc13783_led_devtype, },
	{ "mc13892-led", (kernel_ulong_t)&mc13892_led_devtype, },
	{ }
};
MODULE_DEVICE_TABLE(platform, mc13xxx_led_id_table);
+7 −0
Original line number Diff line number Diff line
@@ -92,6 +92,13 @@ enum {
	MC13783_LED_R3,
	MC13783_LED_G3,
	MC13783_LED_B3,
	/* MC13892 LED IDs */
	MC13892_LED_MD,
	MC13892_LED_AD,
	MC13892_LED_KP,
	MC13892_LED_R,
	MC13892_LED_G,
	MC13892_LED_B,
};

struct mc13xxx_led_platform_data {