brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 794697e Raw
131 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * LEDs driver for PCEngines WRAP4 *5 * Copyright (C) 2006 Kristian Kielhofner <kris@krisk.org>6 *7 * Based on leds-net48xx.c8 */9 10#include <linux/kernel.h>11#include <linux/init.h>12#include <linux/platform_device.h>13#include <linux/leds.h>14#include <linux/err.h>15#include <linux/io.h>16#include <linux/scx200_gpio.h>17#include <linux/module.h>18 19#define DRVNAME "wrap-led"20#define WRAP_POWER_LED_GPIO	221#define WRAP_ERROR_LED_GPIO	322#define WRAP_EXTRA_LED_GPIO	1823 24static struct platform_device *pdev;25 26static void wrap_power_led_set(struct led_classdev *led_cdev,27		enum led_brightness value)28{29	if (value)30		scx200_gpio_set_low(WRAP_POWER_LED_GPIO);31	else32		scx200_gpio_set_high(WRAP_POWER_LED_GPIO);33}34 35static void wrap_error_led_set(struct led_classdev *led_cdev,36		enum led_brightness value)37{38	if (value)39		scx200_gpio_set_low(WRAP_ERROR_LED_GPIO);40	else41		scx200_gpio_set_high(WRAP_ERROR_LED_GPIO);42}43 44static void wrap_extra_led_set(struct led_classdev *led_cdev,45		enum led_brightness value)46{47	if (value)48		scx200_gpio_set_low(WRAP_EXTRA_LED_GPIO);49	else50		scx200_gpio_set_high(WRAP_EXTRA_LED_GPIO);51}52 53static struct led_classdev wrap_power_led = {54	.name			= "wrap::power",55	.brightness_set		= wrap_power_led_set,56	.default_trigger	= "default-on",57	.flags			= LED_CORE_SUSPENDRESUME,58};59 60static struct led_classdev wrap_error_led = {61	.name		= "wrap::error",62	.brightness_set	= wrap_error_led_set,63	.flags			= LED_CORE_SUSPENDRESUME,64};65 66static struct led_classdev wrap_extra_led = {67	.name           = "wrap::extra",68	.brightness_set = wrap_extra_led_set,69	.flags			= LED_CORE_SUSPENDRESUME,70};71 72static int wrap_led_probe(struct platform_device *pdev)73{74	int ret;75 76	ret = devm_led_classdev_register(&pdev->dev, &wrap_power_led);77	if (ret < 0)78		return ret;79 80	ret = devm_led_classdev_register(&pdev->dev, &wrap_error_led);81	if (ret < 0)82		return ret;83 84	return  devm_led_classdev_register(&pdev->dev, &wrap_extra_led);85}86 87static struct platform_driver wrap_led_driver = {88	.probe		= wrap_led_probe,89	.driver		= {90		.name		= DRVNAME,91	},92};93 94static int __init wrap_led_init(void)95{96	int ret;97 98	if (!scx200_gpio_present()) {99		ret = -ENODEV;100		goto out;101	}102 103	ret = platform_driver_register(&wrap_led_driver);104	if (ret < 0)105		goto out;106 107	pdev = platform_device_register_simple(DRVNAME, -1, NULL, 0);108	if (IS_ERR(pdev)) {109		ret = PTR_ERR(pdev);110		platform_driver_unregister(&wrap_led_driver);111		goto out;112	}113 114out:115	return ret;116}117 118static void __exit wrap_led_exit(void)119{120	platform_device_unregister(pdev);121	platform_driver_unregister(&wrap_led_driver);122}123 124module_init(wrap_led_init);125module_exit(wrap_led_exit);126 127MODULE_AUTHOR("Kristian Kielhofner <kris@krisk.org>");128MODULE_DESCRIPTION("PCEngines WRAP LED driver");129MODULE_LICENSE("GPL");130 131