From 7658d764c1e8f56108c5327cab1e85c6d083fa91 Mon Sep 17 00:00:00 2001 From: Andrea Adami Date: Mon, 13 Apr 2015 23:31:01 +0200 Subject: linux-handheld: initial commit of kernel v. 4.0 Build tested for Zaurus and Ipaq h3600, hx4700 Signed-off-by: Andrea Adami --- ...ort-locomo-leds-driver-to-new-locomo-core.patch | 187 +++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 recipes-kernel/linux/linux-handheld-4.0/locomo/0003-leds-port-locomo-leds-driver-to-new-locomo-core.patch (limited to 'recipes-kernel/linux/linux-handheld-4.0/locomo/0003-leds-port-locomo-leds-driver-to-new-locomo-core.patch') diff --git a/recipes-kernel/linux/linux-handheld-4.0/locomo/0003-leds-port-locomo-leds-driver-to-new-locomo-core.patch b/recipes-kernel/linux/linux-handheld-4.0/locomo/0003-leds-port-locomo-leds-driver-to-new-locomo-core.patch new file mode 100644 index 0000000..127129c --- /dev/null +++ b/recipes-kernel/linux/linux-handheld-4.0/locomo/0003-leds-port-locomo-leds-driver-to-new-locomo-core.patch @@ -0,0 +1,187 @@ +From 9ce7fe614b1251e1eb04b714bcb07d48d664e9ca Mon Sep 17 00:00:00 2001 +From: Dmitry Eremin-Solenikov +Date: Mon, 11 Nov 2013 03:04:12 +0400 +Subject: [PATCH 03/20] leds: port locomo leds driver to new locomo core + +Adapt locomo leds driver to new locomo core setup. + +Signed-off-by: Dmitry Eremin-Solenikov +--- + drivers/leds/Kconfig | 1 - + drivers/leds/leds-locomo.c | 116 +++++++++++++++++++++++++-------------------- + 2 files changed, 65 insertions(+), 52 deletions(-) + +diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig +index 25b320d..aec42ae 100644 +--- a/drivers/leds/Kconfig ++++ b/drivers/leds/Kconfig +@@ -79,7 +79,6 @@ config LEDS_LM3642 + config LEDS_LOCOMO + tristate "LED Support for Locomo device" + depends on LEDS_CLASS +- depends on SHARP_LOCOMO + help + This option enables support for the LEDs on Sharp Locomo. + Zaurus models SL-5500 and SL-5600. +diff --git a/drivers/leds/leds-locomo.c b/drivers/leds/leds-locomo.c +index 80ba048..cecc585 100644 +--- a/drivers/leds/leds-locomo.c ++++ b/drivers/leds/leds-locomo.c +@@ -9,89 +9,103 @@ + */ + + #include +-#include +-#include +-#include + #include +- +-#include +-#include ++#include ++#include ++#include ++#include ++ ++struct locomo_led { ++ struct led_classdev led; ++ struct regmap *regmap; ++ unsigned int reg; ++}; + + static void locomoled_brightness_set(struct led_classdev *led_cdev, +- enum led_brightness value, int offset) ++ enum led_brightness value) + { +- struct locomo_dev *locomo_dev = LOCOMO_DEV(led_cdev->dev->parent); +- unsigned long flags; +- +- local_irq_save(flags); +- if (value) +- locomo_writel(LOCOMO_LPT_TOFH, locomo_dev->mapbase + offset); +- else +- locomo_writel(LOCOMO_LPT_TOFL, locomo_dev->mapbase + offset); +- local_irq_restore(flags); ++ struct locomo_led *led = container_of(led_cdev, struct locomo_led, led); ++ ++ regmap_write(led->regmap, led->reg, ++ value ? LOCOMO_LPT_TOFH : LOCOMO_LPT_TOFL); + } + +-static void locomoled_brightness_set0(struct led_classdev *led_cdev, +- enum led_brightness value) ++static int locomo_led_register( ++ struct locomo_led *led, ++ struct device *dev, ++ const char *name, ++ const char *trigger, ++ struct regmap *regmap, ++ unsigned int reg) + { +- locomoled_brightness_set(led_cdev, value, LOCOMO_LPT0); ++ led->led.name = name; ++ led->led.flags = LED_CORE_SUSPENDRESUME; ++ led->led.default_trigger = trigger; ++ led->led.brightness_set = locomoled_brightness_set; ++ led->regmap = regmap; ++ led->reg = reg; ++ ++ return led_classdev_register(dev, &led->led); + } + +-static void locomoled_brightness_set1(struct led_classdev *led_cdev, +- enum led_brightness value) ++static int locomoled_probe(struct platform_device *pdev) + { +- locomoled_brightness_set(led_cdev, value, LOCOMO_LPT1); +-} ++ int ret; ++ struct locomo_led *leds; ++ struct regmap *regmap; + +-static struct led_classdev locomo_led0 = { +- .name = "locomo:amber:charge", +- .default_trigger = "main-battery-charging", +- .brightness_set = locomoled_brightness_set0, +-}; ++ leds = devm_kzalloc(&pdev->dev, 2 * sizeof(*leds), GFP_KERNEL); ++ if (!leds) ++ return -ENOMEM; + +-static struct led_classdev locomo_led1 = { +- .name = "locomo:green:mail", +- .default_trigger = "nand-disk", +- .brightness_set = locomoled_brightness_set1, +-}; ++ regmap = dev_get_regmap(pdev->dev.parent, NULL); ++ if (!regmap) ++ return -ENODEV; + +-static int locomoled_probe(struct locomo_dev *ldev) +-{ +- int ret; ++ platform_set_drvdata(pdev, leds); + +- ret = led_classdev_register(&ldev->dev, &locomo_led0); ++ ret = locomo_led_register(leds, ++ &pdev->dev, ++ "locomo:amber:charge", ++ "main-battery-charging", ++ regmap, ++ LOCOMO_LPT0); + if (ret < 0) + return ret; + +- ret = led_classdev_register(&ldev->dev, &locomo_led1); ++ ret = locomo_led_register(leds + 1, ++ &pdev->dev, ++ "locomo:green:mail", ++ "mmc0", ++ regmap, ++ LOCOMO_LPT1); + if (ret < 0) +- led_classdev_unregister(&locomo_led0); ++ led_classdev_unregister(&leds[0].led); + + return ret; + } + +-static int locomoled_remove(struct locomo_dev *dev) ++static int locomoled_remove(struct platform_device *pdev) + { +- led_classdev_unregister(&locomo_led0); +- led_classdev_unregister(&locomo_led1); ++ struct locomo_led *leds = platform_get_drvdata(pdev); ++ ++ led_classdev_unregister(&leds[0].led); ++ led_classdev_unregister(&leds[1].led); ++ + return 0; + } + +-static struct locomo_driver locomoled_driver = { +- .drv = { +- .name = "locomoled" ++static struct platform_driver locomoled_driver = { ++ .driver = { ++ .name = "locomo-led" + }, +- .devid = LOCOMO_DEVID_LED, + .probe = locomoled_probe, + .remove = locomoled_remove, + }; + +-static int __init locomoled_init(void) +-{ +- return locomo_driver_register(&locomoled_driver); +-} +-module_init(locomoled_init); ++module_platform_driver(locomoled_driver); + + MODULE_AUTHOR("John Lenz "); + MODULE_DESCRIPTION("Locomo LED driver"); + MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:locomo-led"); +-- +1.9.1 + -- cgit 1.2.3-korg