From 207bed1a3e5b0a1c2f824b986d55972c31e99938 Mon Sep 17 00:00:00 2001 From: Marc Dietrich Date: Sun, 17 Jun 2012 19:53:33 +0200 Subject: [PATCH 2/6] NOT_FOR_UPSTREAM: staging: nvec: move led init out of probe to its own function Moves the led init to its own function. This is in preparation to the following speaker mute inclusion via a gpio driver. Signed-off-by: Marc Dietrich --- drivers/staging/nvec/nvec_paz00.c | 73 +++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/drivers/staging/nvec/nvec_paz00.c b/drivers/staging/nvec/nvec_paz00.c index 934b796..a10385d 100644 --- a/drivers/staging/nvec/nvec_paz00.c +++ b/drivers/staging/nvec/nvec_paz00.c @@ -11,72 +11,69 @@ * */ -#include #include -#include #include +#include +#include #include #include "nvec.h" -#define to_nvec_led(led_cdev) \ - container_of(led_cdev, struct nvec_led, cdev) +#define NVEC_LED_MAX 8 -#define NVEC_LED_REQ {'\x0d', '\x10', '\x45', '\x10', '\x00'} +enum nvec_oem0_subcmds { + EXEC_EC_CMD = 0x10, +}; -#define NVEC_LED_MAX 8 +enum nvec_oem0_ec_cmds { + SET_DEVICE_STATUS = 0x45, +}; -struct nvec_led { - struct led_classdev cdev; +struct nvec_paz00_struct { struct nvec_chip *nvec; + struct led_classdev *led_dev; }; +struct nvec_paz00_struct nvec_paz00; + static void nvec_led_brightness_set(struct led_classdev *led_cdev, enum led_brightness value) { - struct nvec_led *led = to_nvec_led(led_cdev); - unsigned char buf[] = NVEC_LED_REQ; - buf[4] = value; - - nvec_write_async(led->nvec, buf, sizeof(buf)); - - led->cdev.brightness = value; + unsigned char buf[] = { NVEC_OEM0, EXEC_EC_CMD, SET_DEVICE_STATUS, + '\x10', value }; + nvec_paz00.led_dev->brightness = value; + nvec_write_async(nvec_paz00.nvec, buf, sizeof(buf)); } -static int nvec_paz00_probe(struct platform_device *pdev) +static int paz00_init_leds(struct device *dev) { - struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent); - struct nvec_led *led; - int ret = 0; - - led = devm_kzalloc(&pdev->dev, sizeof(*led), GFP_KERNEL); - if (led == NULL) + nvec_paz00.led_dev = devm_kzalloc(dev, sizeof(struct led_classdev), + GFP_KERNEL); + if (!nvec_paz00.led_dev) return -ENOMEM; - led->cdev.max_brightness = NVEC_LED_MAX; + nvec_paz00.led_dev->max_brightness = NVEC_LED_MAX; + nvec_paz00.led_dev->brightness_set = nvec_led_brightness_set; + nvec_paz00.led_dev->brightness = 0; + nvec_paz00.led_dev->name = "paz00-led"; + nvec_paz00.led_dev->flags |= LED_CORE_SUSPENDRESUME; - led->cdev.brightness_set = nvec_led_brightness_set; - led->cdev.name = "paz00-led"; - led->cdev.flags |= LED_CORE_SUSPENDRESUME; - led->nvec = nvec; - - platform_set_drvdata(pdev, led); + return led_classdev_register(dev, nvec_paz00.led_dev); +} - ret = led_classdev_register(&pdev->dev, &led->cdev); - if (ret < 0) - return ret; +static int nvec_paz00_probe(struct platform_device *pdev) +{ + struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent); - /* to expose the default value to userspace */ - led->cdev.brightness = 0; + platform_set_drvdata(pdev, &nvec_paz00); + nvec_paz00.nvec = nvec; - return 0; + return paz00_init_leds(&pdev->dev); } static int nvec_paz00_remove(struct platform_device *pdev) { - struct nvec_led *led = platform_get_drvdata(pdev); - - led_classdev_unregister(&led->cdev); + led_classdev_unregister(nvec_paz00.led_dev); return 0; } -- 1.8.3.1