Blame view

drivers/leds/leds-hp6xx.c 2.23 KB
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
1
2
3
4
5
6
7
8
9
10
11
  /*
   * LED Triggers Core
   * For the HP Jornada 620/660/680/690 handhelds
   *
   * Copyright 2008 Kristoffer Ericson <kristoffer.ericson@gmail.com>
   *     this driver is based on leds-spitz.c by Richard Purdie.
   *
   * 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.
   */
86383b557   Axel Lin   leds: add missing...
12
  #include <linux/module.h>
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
13
14
15
16
17
  #include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/platform_device.h>
  #include <linux/leds.h>
  #include <asm/hd64461.h>
7639a4541   Paul Mundt   sh: Migrate commo...
18
  #include <mach/hp6xx.h>
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
19

4d404fd5c   Németh Márton   leds: Cleanup var...
20
21
  static void hp6xxled_green_set(struct led_classdev *led_cdev,
  			       enum led_brightness value)
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
22
23
24
25
26
27
28
29
30
  {
  	u8 v8;
  
  	v8 = inb(PKDR);
  	if (value)
  		outb(v8 & (~PKDR_LED_GREEN), PKDR);
  	else
  		outb(v8 | PKDR_LED_GREEN, PKDR);
  }
4d404fd5c   Németh Márton   leds: Cleanup var...
31
32
  static void hp6xxled_red_set(struct led_classdev *led_cdev,
  			     enum led_brightness value)
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
33
34
35
36
37
38
39
40
41
42
43
44
45
46
  {
  	u16 v16;
  
  	v16 = inw(HD64461_GPBDR);
  	if (value)
  		outw(v16 & (~HD64461_GPBDR_LED_RED), HD64461_GPBDR);
  	else
  		outw(v16 | HD64461_GPBDR_LED_RED, HD64461_GPBDR);
  }
  
  static struct led_classdev hp6xx_red_led = {
  	.name			= "hp6xx:red",
  	.default_trigger	= "hp6xx-charge",
  	.brightness_set		= hp6xxled_red_set,
859cb7f2a   Richard Purdie   leds: Add suspend...
47
  	.flags			= LED_CORE_SUSPENDRESUME,
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
48
49
50
51
52
53
  };
  
  static struct led_classdev hp6xx_green_led = {
  	.name			= "hp6xx:green",
  	.default_trigger	= "ide-disk",
  	.brightness_set		= hp6xxled_green_set,
859cb7f2a   Richard Purdie   leds: Add suspend...
54
  	.flags			= LED_CORE_SUSPENDRESUME,
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
55
  };
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
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
  static int hp6xxled_probe(struct platform_device *pdev)
  {
  	int ret;
  
  	ret = led_classdev_register(&pdev->dev, &hp6xx_red_led);
  	if (ret < 0)
  		return ret;
  
  	ret = led_classdev_register(&pdev->dev, &hp6xx_green_led);
  	if (ret < 0)
  		led_classdev_unregister(&hp6xx_red_led);
  
  	return ret;
  }
  
  static int hp6xxled_remove(struct platform_device *pdev)
  {
  	led_classdev_unregister(&hp6xx_red_led);
  	led_classdev_unregister(&hp6xx_green_led);
  
  	return 0;
  }
  
  static struct platform_driver hp6xxled_driver = {
  	.probe		= hp6xxled_probe,
  	.remove		= hp6xxled_remove,
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
82
83
  	.driver		= {
  		.name		= "hp6xx-led",
3c4ded971   Kay Sievers   leds: fix platfor...
84
  		.owner		= THIS_MODULE,
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
85
86
  	},
  };
892a8843f   Axel Lin   leds: convert led...
87
  module_platform_driver(hp6xxled_driver);
d39a7a63e   Kristoffer Ericson   leds: Add HP Jorn...
88
89
90
91
  
  MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>");
  MODULE_DESCRIPTION("HP Jornada 6xx LED driver");
  MODULE_LICENSE("GPL");
892a8843f   Axel Lin   leds: convert led...
92
  MODULE_ALIAS("platform:hp6xx-led");