cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

leds-net48xx.c (1872B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * LEDs driver for Soekris net48xx
      4 *
      5 * Copyright (C) 2006 Chris Boot <bootc@bootc.net>
      6 *
      7 * Based on leds-ams-delta.c
      8 */
      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/nsc_gpio.h>
     17#include <linux/scx200_gpio.h>
     18#include <linux/module.h>
     19
     20#define DRVNAME "net48xx-led"
     21#define NET48XX_ERROR_LED_GPIO	20
     22
     23static struct platform_device *pdev;
     24
     25static void net48xx_error_led_set(struct led_classdev *led_cdev,
     26		enum led_brightness value)
     27{
     28	scx200_gpio_ops.gpio_set(NET48XX_ERROR_LED_GPIO, value ? 1 : 0);
     29}
     30
     31static struct led_classdev net48xx_error_led = {
     32	.name		= "net48xx::error",
     33	.brightness_set	= net48xx_error_led_set,
     34	.flags		= LED_CORE_SUSPENDRESUME,
     35};
     36
     37static int net48xx_led_probe(struct platform_device *pdev)
     38{
     39	return devm_led_classdev_register(&pdev->dev, &net48xx_error_led);
     40}
     41
     42static struct platform_driver net48xx_led_driver = {
     43	.probe		= net48xx_led_probe,
     44	.driver		= {
     45		.name		= DRVNAME,
     46	},
     47};
     48
     49static int __init net48xx_led_init(void)
     50{
     51	int ret;
     52
     53	/* small hack, but scx200_gpio doesn't set .dev if the probe fails */
     54	if (!scx200_gpio_ops.dev) {
     55		ret = -ENODEV;
     56		goto out;
     57	}
     58
     59	ret = platform_driver_register(&net48xx_led_driver);
     60	if (ret < 0)
     61		goto out;
     62
     63	pdev = platform_device_register_simple(DRVNAME, -1, NULL, 0);
     64	if (IS_ERR(pdev)) {
     65		ret = PTR_ERR(pdev);
     66		platform_driver_unregister(&net48xx_led_driver);
     67		goto out;
     68	}
     69
     70out:
     71	return ret;
     72}
     73
     74static void __exit net48xx_led_exit(void)
     75{
     76	platform_device_unregister(pdev);
     77	platform_driver_unregister(&net48xx_led_driver);
     78}
     79
     80module_init(net48xx_led_init);
     81module_exit(net48xx_led_exit);
     82
     83MODULE_AUTHOR("Chris Boot <bootc@bootc.net>");
     84MODULE_DESCRIPTION("Soekris net48xx LED driver");
     85MODULE_LICENSE("GPL");
     86