Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
  1/*
  2 * LEDs driver for Amstrad Delta (E3)
  3 *
  4 * Copyright (C) 2006 Jonathan McDowell <noodles@earth.li>
  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/module.h>
 12#include <linux/kernel.h>
 13#include <linux/init.h>
 14#include <linux/platform_device.h>
 15#include <linux/leds.h>
 16#include <plat/board-ams-delta.h>
 17
 18/*
 19 * Our context
 20 */
 21struct ams_delta_led {
 22	struct led_classdev	cdev;
 23	u8			bitmask;
 24};
 25
 26static void ams_delta_led_set(struct led_classdev *led_cdev,
 27		enum led_brightness value)
 28{
 29	struct ams_delta_led *led_dev =
 30		container_of(led_cdev, struct ams_delta_led, cdev);
 31
 32	if (value)
 33		ams_delta_latch1_write(led_dev->bitmask, led_dev->bitmask);
 34	else
 35		ams_delta_latch1_write(led_dev->bitmask, 0);
 36}
 37
 38static struct ams_delta_led ams_delta_leds[] = {
 39	{
 40		.cdev		= {
 41			.name		= "ams-delta::camera",
 42			.brightness_set = ams_delta_led_set,
 43		},
 44		.bitmask	= AMS_DELTA_LATCH1_LED_CAMERA,
 45	},
 46	{
 47		.cdev		= {
 48			.name		= "ams-delta::advert",
 49			.brightness_set = ams_delta_led_set,
 50		},
 51		.bitmask	= AMS_DELTA_LATCH1_LED_ADVERT,
 52	},
 53	{
 54		.cdev		= {
 55			.name		= "ams-delta::email",
 56			.brightness_set = ams_delta_led_set,
 57		},
 58		.bitmask	= AMS_DELTA_LATCH1_LED_EMAIL,
 59	},
 60	{
 61		.cdev		= {
 62			.name		= "ams-delta::handsfree",
 63			.brightness_set = ams_delta_led_set,
 64		},
 65		.bitmask	= AMS_DELTA_LATCH1_LED_HANDSFREE,
 66	},
 67	{
 68		.cdev		= {
 69			.name		= "ams-delta::voicemail",
 70			.brightness_set = ams_delta_led_set,
 71		},
 72		.bitmask	= AMS_DELTA_LATCH1_LED_VOICEMAIL,
 73	},
 74	{
 75		.cdev		= {
 76			.name		= "ams-delta::voice",
 77			.brightness_set = ams_delta_led_set,
 78		},
 79		.bitmask	= AMS_DELTA_LATCH1_LED_VOICE,
 80	},
 81};
 82
 83static int ams_delta_led_probe(struct platform_device *pdev)
 84{
 85	int i, ret;
 86
 87	for (i = 0; i < ARRAY_SIZE(ams_delta_leds); i++) {
 88		ams_delta_leds[i].cdev.flags |= LED_CORE_SUSPENDRESUME;
 89		ret = led_classdev_register(&pdev->dev,
 90				&ams_delta_leds[i].cdev);
 91		if (ret < 0)
 92			goto fail;
 93	}
 94
 95	return 0;
 96fail:
 97	while (--i >= 0)
 98		led_classdev_unregister(&ams_delta_leds[i].cdev);
 99	return ret;	
100}
101
102static int ams_delta_led_remove(struct platform_device *pdev)
103{
104	int i;
105
106	for (i = 0; i < ARRAY_SIZE(ams_delta_leds); i++)
107		led_classdev_unregister(&ams_delta_leds[i].cdev);
108
109	return 0;
110}
111
112static struct platform_driver ams_delta_led_driver = {
113	.probe		= ams_delta_led_probe,
114	.remove		= ams_delta_led_remove,
115	.driver		= {
116		.name = "ams-delta-led",
117		.owner = THIS_MODULE,
118	},
119};
120
121static int __init ams_delta_led_init(void)
122{
123	return platform_driver_register(&ams_delta_led_driver);
124}
125
126static void __exit ams_delta_led_exit(void)
127{
128	platform_driver_unregister(&ams_delta_led_driver);
129}
130
131module_init(ams_delta_led_init);
132module_exit(ams_delta_led_exit);
133
134MODULE_AUTHOR("Jonathan McDowell <noodles@earth.li>");
135MODULE_DESCRIPTION("Amstrad Delta LED driver");
136MODULE_LICENSE("GPL");
137MODULE_ALIAS("platform:ams-delta-led");