Blame view

drivers/leds/leds-locomo.c 2.31 KB
4d3cb3547   Richard Purdie   [PATCH] LED: add ...
1
  /*
f30c22695   Uwe Zeisberger   fix file specific...
2
   * linux/drivers/leds/leds-locomo.c
4d3cb3547   Richard Purdie   [PATCH] LED: add ...
3
4
5
6
7
8
9
   *
   * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
4d3cb3547   Richard Purdie   [PATCH] LED: add ...
10
11
  #include <linux/kernel.h>
  #include <linux/init.h>
54f4dedb5   Paul Gortmaker   drivers/leds: Add...
12
  #include <linux/module.h>
4d3cb3547   Richard Purdie   [PATCH] LED: add ...
13
14
  #include <linux/device.h>
  #include <linux/leds.h>
a09e64fbc   Russell King   [ARM] Move includ...
15
  #include <mach/hardware.h>
4d3cb3547   Richard Purdie   [PATCH] LED: add ...
16
17
18
19
20
  #include <asm/hardware/locomo.h>
  
  static void locomoled_brightness_set(struct led_classdev *led_cdev,
  				enum led_brightness value, int offset)
  {
8f115cd58   Richard Purdie   leds: Fix locomo ...
21
  	struct locomo_dev *locomo_dev = LOCOMO_DEV(led_cdev->dev->parent);
4d3cb3547   Richard Purdie   [PATCH] LED: add ...
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  	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);
  }
  
  static void locomoled_brightness_set1(struct led_classdev *led_cdev,
  				enum led_brightness value)
  {
  	locomoled_brightness_set(led_cdev, value, LOCOMO_LPT1);
  }
  
  static struct led_classdev locomo_led0 = {
6c152beef   Richard Purdie   leds: Standardise...
45
  	.name			= "locomo:amber:charge",
167c55ef8   Thomas Kunze   collie: locomo-le...
46
  	.default_trigger	= "main-battery-charging",
4d3cb3547   Richard Purdie   [PATCH] LED: add ...
47
48
49
50
  	.brightness_set		= locomoled_brightness_set0,
  };
  
  static struct led_classdev locomo_led1 = {
6c152beef   Richard Purdie   leds: Standardise...
51
  	.name			= "locomo:green:mail",
b7408aff2   Richard Purdie   [ARM] 3563/1: LED...
52
  	.default_trigger	= "nand-disk",
4d3cb3547   Richard Purdie   [PATCH] LED: add ...
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
  	.brightness_set		= locomoled_brightness_set1,
  };
  
  static int locomoled_probe(struct locomo_dev *ldev)
  {
  	int ret;
  
  	ret = led_classdev_register(&ldev->dev, &locomo_led0);
  	if (ret < 0)
  		return ret;
  
  	ret = led_classdev_register(&ldev->dev, &locomo_led1);
  	if (ret < 0)
  		led_classdev_unregister(&locomo_led0);
  
  	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"
  	},
  	.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_AUTHOR("John Lenz <lenz@cs.wisc.edu>");
  MODULE_DESCRIPTION("Locomo LED driver");
  MODULE_LICENSE("GPL");