Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-at91 / board-sam9m10g45ek.c
index 1ea61328f30dc19feddf682197f2d853174ee7fc..b227732b0c8343155a35d57e6ca9f8bcb530ed91 100644 (file)
@@ -26,6 +26,8 @@
 #include <linux/leds.h>
 #include <linux/atmel-mci.h>
 #include <linux/delay.h>
+#include <linux/pwm.h>
+#include <linux/leds_pwm.h>
 
 #include <linux/platform_data/at91_adc.h>
 
@@ -416,7 +418,7 @@ static struct gpio_led ek_leds[] = {
                .active_low             = 1,
                .default_trigger        = "nand-disk",
        },
-#if !(defined(CONFIG_LEDS_ATMEL_PWM) || defined(CONFIG_LEDS_ATMEL_PWM_MODULE))
+#if !IS_ENABLED(CONFIG_LEDS_PWM)
        {       /* "right" led, green, userled1, pwm1 */
                .name                   = "d7",
                .gpio                   = AT91_PIN_PD31,
@@ -430,22 +432,41 @@ static struct gpio_led ek_leds[] = {
 /*
  * PWM Leds
  */
-static struct gpio_led ek_pwm_led[] = {
-#if defined(CONFIG_LEDS_ATMEL_PWM) || defined(CONFIG_LEDS_ATMEL_PWM_MODULE)
+static struct pwm_lookup pwm_lookup[] = {
+       PWM_LOOKUP("at91sam9rl-pwm", 1, "leds_pwm", "d7",
+                  5000, PWM_POLARITY_INVERSED),
+};
+
+#if IS_ENABLED(CONFIG_LEDS_PWM)
+static struct led_pwm pwm_leds[] = {
        {       /* "right" led, green, userled1, pwm1 */
-               .name                   = "d7",
-               .gpio                   = 1,    /* is PWM channel number */
-               .active_low             = 1,
-               .default_trigger        = "none",
+               .name = "d7",
+               .max_brightness = 255,
        },
-#endif
 };
 
+static struct led_pwm_platform_data pwm_data = {
+       .num_leds       = ARRAY_SIZE(pwm_leds),
+       .leds           = pwm_leds,
+};
+
+static struct platform_device leds_pwm = {
+       .name   = "leds_pwm",
+       .id     = -1,
+       .dev    = {
+               .platform_data = &pwm_data,
+       },
+};
+#endif
+
 static struct platform_device *devices[] __initdata = {
 #if defined(CONFIG_SOC_CAMERA_OV2640) || \
        defined(CONFIG_SOC_CAMERA_OV2640_MODULE)
        &isi_ov2640,
 #endif
+#if IS_ENABLED(CONFIG_LEDS_PWM)
+       &leds_pwm,
+#endif
 };
 
 static void __init ek_board_init(void)
@@ -486,7 +507,10 @@ static void __init ek_board_init(void)
        at91_add_device_ac97(&ek_ac97_data);
        /* LEDs */
        at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
-       at91_pwm_leds(ek_pwm_led, ARRAY_SIZE(ek_pwm_led));
+       pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup));
+#if IS_ENABLED(CONFIG_LEDS_PWM)
+       at91_add_device_pwm(1 << AT91_PWM1);
+#endif
        /* Other platform devices */
        platform_add_devices(devices, ARRAY_SIZE(devices));
 }