1/* 2 * linux/drivers/leds/leds-locomo.c 3 * 4 * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10 11#include <linux/kernel.h> 12#include <linux/init.h> 13#include <linux/device.h> 14#include <linux/leds.h> 15 16#include <mach/hardware.h> 17#include <asm/hardware/locomo.h> 18 19static void locomoled_brightness_set(struct led_classdev *led_cdev, 20 enum led_brightness value, int offset) 21{ 22 struct locomo_dev *locomo_dev = LOCOMO_DEV(led_cdev->dev->parent); 23 unsigned long flags; 24 25 local_irq_save(flags); 26 if (value) 27 locomo_writel(LOCOMO_LPT_TOFH, locomo_dev->mapbase + offset); 28 else 29 locomo_writel(LOCOMO_LPT_TOFL, locomo_dev->mapbase + offset); 30 local_irq_restore(flags); 31} 32 33static void locomoled_brightness_set0(struct led_classdev *led_cdev, 34 enum led_brightness value) 35{ 36 locomoled_brightness_set(led_cdev, value, LOCOMO_LPT0); 37} 38 39static void locomoled_brightness_set1(struct led_classdev *led_cdev, 40 enum led_brightness value) 41{ 42 locomoled_brightness_set(led_cdev, value, LOCOMO_LPT1); 43} 44 45static struct led_classdev locomo_led0 = { 46 .name = "locomo:amber:charge", 47 .default_trigger = "main-battery-charging", 48 .brightness_set = locomoled_brightness_set0, 49}; 50 51static struct led_classdev locomo_led1 = { 52 .name = "locomo:green:mail", 53 .default_trigger = "nand-disk", 54 .brightness_set = locomoled_brightness_set1, 55}; 56 57static int locomoled_probe(struct locomo_dev *ldev) 58{ 59 int ret; 60 61 ret = led_classdev_register(&ldev->dev, &locomo_led0); 62 if (ret < 0) 63 return ret; 64 65 ret = led_classdev_register(&ldev->dev, &locomo_led1); 66 if (ret < 0) 67 led_classdev_unregister(&locomo_led0); 68 69 return ret; 70} 71 72static int locomoled_remove(struct locomo_dev *dev) 73{ 74 led_classdev_unregister(&locomo_led0); 75 led_classdev_unregister(&locomo_led1); 76 return 0; 77} 78 79static struct locomo_driver locomoled_driver = { 80 .drv = { 81 .name = "locomoled" 82 }, 83 .devid = LOCOMO_DEVID_LED, 84 .probe = locomoled_probe, 85 .remove = locomoled_remove, 86}; 87 88static int __init locomoled_init(void) 89{ 90 return locomo_driver_register(&locomoled_driver); 91} 92module_init(locomoled_init); 93 94MODULE_AUTHOR("John Lenz <lenz@cs.wisc.edu>"); 95MODULE_DESCRIPTION("Locomo LED driver"); 96MODULE_LICENSE("GPL"); 97