From patchwork Sun May 17 16:27:42 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 6424371 Return-Path: X-Original-To: patchwork-linux-fbdev@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 9E8BDC0433 for ; Sun, 17 May 2015 16:28:39 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id AD202205FC for ; Sun, 17 May 2015 16:28:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B541D205FA for ; Sun, 17 May 2015 16:28:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751823AbbEQQ2g (ORCPT ); Sun, 17 May 2015 12:28:36 -0400 Received: from mail-pa0-f42.google.com ([209.85.220.42]:34178 "EHLO mail-pa0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750765AbbEQQ2e (ORCPT ); Sun, 17 May 2015 12:28:34 -0400 Received: by pabru16 with SMTP id ru16so113925025pab.1; Sun, 17 May 2015 09:28:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=z5QUOemb0WVbVCw36x4vjdRsKLRGtE9ecafFGCSgoIk=; b=FXp/e9NLtrQgFpltFcBRNmvx9xQcvDxFi0UjZGbxfhBFSNlDrTcxzlbL5qlz3g5JO0 1RJJQ8Xbfc46TtmW4TaOuusBq7lrwf/If7XzZ2ukgMgHj7SN8ECSRNsfFVp39tdHDkhJ QO1xFWhziMUTAA0oNgnTHTqrfLXTFdj/6MROSBl6tH963i3+nrtgo/vMpMjDyOWvRmD8 VX00vGqdFz5ZlqlVpsjk/KBRElIzJ9Yu8eHjsDH8mshVB9qWpnROoh/4ZQln9JMjpC3I +gNnc6jI/EVOHzzIePubTw8yIHvj2dsqxhdVvhAJWazeP/7Hx4wGM/NRpg2juKXjXzNI GVZA== X-Received: by 10.70.91.37 with SMTP id cb5mr36816215pdb.151.1431880113841; Sun, 17 May 2015 09:28:33 -0700 (PDT) Received: from fangorn.rup.mentorg.com (nat-min.mentorg.com. [139.181.32.34]) by mx.google.com with ESMTPSA id pw9sm7574264pac.27.2015.05.17.09.28.27 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 17 May 2015 09:28:33 -0700 (PDT) From: Dmitry Eremin-Solenikov To: Russell King , Daniel Mack , Robert Jarzmik , Linus Walleij , Alexandre Courbot , Wolfram Sang , Dmitry Torokhov , Bryan Wu , Richard Purdie , Samuel Ortiz , Lee Jones , Mark Brown , Jingoo Han , Jean-Christophe Plagniol-Villard , Tomi Valkeinen , Liam Girdwood , Andrea Adami Cc: linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-spi@vger.kernel.org, linux-fbdev@vger.kernel.org, alsa-devel@alsa-project.org Subject: [PATCH v3 02/17] leds: port locomo leds driver to new locomo core Date: Sun, 17 May 2015 19:27:42 +0300 Message-Id: <1431880077-26321-3-git-send-email-dbaryshkov@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1431880077-26321-1-git-send-email-dbaryshkov@gmail.com> References: <1431880077-26321-1-git-send-email-dbaryshkov@gmail.com> Sender: linux-fbdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Adapt locomo leds driver to new locomo core setup. Signed-off-by: Dmitry Eremin-Solenikov Acked-by: Jacek Anaszewski --- drivers/leds/Kconfig | 2 +- drivers/leds/leds-locomo.c | 117 +++++++++++++++++++++++---------------------- 2 files changed, 61 insertions(+), 58 deletions(-) diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index 966b960..d086aac 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -79,7 +79,7 @@ config LEDS_LM3642 config LEDS_LOCOMO tristate "LED Support for Locomo device" depends on LEDS_CLASS - depends on SHARP_LOCOMO + depends on MFD_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..a4286e9 100644 --- a/drivers/leds/leds-locomo.c +++ b/drivers/leds/leds-locomo.c @@ -9,89 +9,92 @@ */ #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) -{ - 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); -} - -static void locomoled_brightness_set0(struct led_classdev *led_cdev, enum led_brightness value) { - locomoled_brightness_set(led_cdev, value, LOCOMO_LPT0); + 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_set1(struct led_classdev *led_cdev, - enum led_brightness value) +static int locomo_led_register( + struct device *dev, + struct locomo_led *led, + const char *name, + const char *trigger, + struct regmap *regmap, + unsigned int reg) { - locomoled_brightness_set(led_cdev, value, LOCOMO_LPT1); + 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 devm_led_classdev_register(dev, &led->led); } -static struct led_classdev locomo_led0 = { - .name = "locomo:amber:charge", - .default_trigger = "main-battery-charging", - .brightness_set = locomoled_brightness_set0, -}; - -static struct led_classdev locomo_led1 = { - .name = "locomo:green:mail", - .default_trigger = "nand-disk", - .brightness_set = locomoled_brightness_set1, -}; - -static int locomoled_probe(struct locomo_dev *ldev) +static int locomoled_probe(struct platform_device *pdev) { int ret; - - ret = led_classdev_register(&ldev->dev, &locomo_led0); + struct locomo_led *leds; + struct regmap *regmap; + + leds = devm_kzalloc(&pdev->dev, 2 * sizeof(*leds), GFP_KERNEL); + if (!leds) + return -ENOMEM; + + regmap = dev_get_regmap(pdev->dev.parent, NULL); + if (!regmap) + return -ENODEV; + + ret = locomo_led_register( + &pdev->dev, + leds, + "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( + &pdev->dev, + leds + 1, + "locomo:green:mail", + "mmc0", + regmap, + LOCOMO_LPT1); if (ret < 0) - led_classdev_unregister(&locomo_led0); - - return ret; -} + return ret; -static int locomoled_remove(struct locomo_dev *dev) -{ - led_classdev_unregister(&locomo_led0); - led_classdev_unregister(&locomo_led1); 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");