Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 268561
b: refs/heads/master
c: 97cc265
h: refs/heads/master
i:
  268559: a867079
v: v3
  • Loading branch information
Ilya Petrov authored and Greg Kroah-Hartman committed Sep 30, 2011
1 parent 2b1a95c commit f34eb37
Show file tree
Hide file tree
Showing 6 changed files with 128 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6dca320c8f16b464bb762494b509b2b02897054e
refs/heads/master: 97cc26576fa2b0eb1aad1b29515bb0a32f86c45c
6 changes: 6 additions & 0 deletions trunk/drivers/staging/nvec/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,9 @@ config NVEC_POWER
help
Say Y to enable support for battery and charger interface for
nVidia compliant embedded controllers.

config NVEC_LEDS
bool "NVEC leds"
depends on MFD_NVEC && LEDS_CLASS
help
Say Y to enable yellow side leds on AC100 or other nVidia tegra nvec leds
1 change: 1 addition & 0 deletions trunk/drivers/staging/nvec/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ obj-$(CONFIG_SERIO_NVEC_PS2) += nvec_ps2.o
obj-$(CONFIG_MFD_NVEC) += nvec.o
obj-$(CONFIG_NVEC_POWER) += nvec_power.o
obj-$(CONFIG_KEYBOARD_NVEC) += nvec_kbd.o
obj-$(CONFIG_NVEC_LEDS) += nvec_leds.o
4 changes: 4 additions & 0 deletions trunk/drivers/staging/nvec/nvec.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ static struct mfd_cell nvec_devices[] = {
.name = "nvec-power",
.id = 2,
},
{
.name = "nvec-leds",
.id = 1,
},
};

int nvec_register_notifier(struct nvec_chip *nvec, struct notifier_block *nb,
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/staging/nvec/nvec_kbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ static int __devinit nvec_kbd_probe(struct platform_device *pdev)
keycodes[j++] = extcode_tab_us102[i];

idev = input_allocate_device();
idev->name = "Tegra nvec keyboard";
idev->phys = "i2c3_slave/nvec";
idev->name = "nvec keyboard";
idev->phys = "nvec";
idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | BIT_MASK(EV_LED);
idev->ledbit[0] = BIT_MASK(LED_CAPSL);
idev->event = nvec_kbd_event;
Expand Down
114 changes: 114 additions & 0 deletions trunk/drivers/staging/nvec/nvec_leds.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/*
* nvec_leds: LED driver for a NVIDIA compliant embedded controller
*
* Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.launchpad.net>
*
* Authors: Ilya Petrov <ilya.muromec@gmail.com>
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
*/

#include <linux/module.h>
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/leds.h>
#include <linux/platform_device.h>
#include "nvec.h"

#define to_nvec_led(led_cdev) \
container_of(led_cdev, struct nvec_led, cdev)

#define NVEC_LED_REQ {'\x0d', '\x10', '\x45', '\x10', '\x00'}

#define NVEC_LED_MAX 8

struct nvec_led {
struct led_classdev cdev;
struct nvec_chip *nvec;
};

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;

}

static int __devinit nvec_led_probe(struct platform_device *pdev)
{
struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
struct nvec_led *led;
int ret = 0;

led = kzalloc(sizeof(*led), GFP_KERNEL);
if (led == NULL)
return -ENOMEM;

led->cdev.max_brightness = NVEC_LED_MAX;

led->cdev.brightness_set = nvec_led_brightness_set;
led->cdev.name = "nvec-led";
led->cdev.flags |= LED_CORE_SUSPENDRESUME;
led->nvec = nvec;

platform_set_drvdata(pdev, led);

ret = led_classdev_register(&pdev->dev, &led->cdev);
if (ret < 0)
goto err_led;

/* to expose the default value to userspace */
led->cdev.brightness = 0;

return 0;

err_led:
kfree(led);
return ret;
}

static int __devexit nvec_led_remove(struct platform_device *pdev)
{
struct nvec_led *led = platform_get_drvdata(pdev);

led_classdev_unregister(&led->cdev);
kfree(led);
return 0;
}

static struct platform_driver nvec_led_driver = {
.probe = nvec_led_probe,
.remove = __devexit_p(nvec_led_remove),
.driver = {
.name = "nvec-leds",
.owner = THIS_MODULE,
},
};

static int __init nvec_led_init(void)
{
return platform_driver_register(&nvec_led_driver);
}

module_init(nvec_led_init);

static void __exit nvec_led_exit(void)
{
platform_driver_unregister(&nvec_led_driver);
}

module_exit(nvec_led_exit);

MODULE_AUTHOR("Ilya Petrov <ilya.muromec@gmail.com>");
MODULE_DESCRIPTION("Tegra NVEC LED driver");
MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:nvec-leds");

0 comments on commit f34eb37

Please sign in to comment.