/* * drivers/leds/leds-apu.c * Copyright (C) 2017 Alan Mizrahi, alan at mizrahi dot com dot ve * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the names of the copyright holders nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #define pr_fmt(fmt) … #include <linux/dmi.h> #include <linux/err.h> #include <linux/init.h> #include <linux/io.h> #include <linux/kernel.h> #include <linux/leds.h> #include <linux/module.h> #include <linux/platform_device.h> #define APU1_FCH_ACPI_MMIO_BASE … #define APU1_FCH_GPIO_BASE … #define APU1_LEDON … #define APU1_LEDOFF … #define APU1_NUM_GPIO … #define APU1_IOSIZE … /* LED access parameters */ struct apu_param { … }; /* LED private data */ struct apu_led_priv { … }; #define cdev_to_priv(c) … /* LED profile */ struct apu_led_profile { … }; struct apu_led_pdata { … }; static struct apu_led_pdata *apu_led; static const struct apu_led_profile apu1_led_profile[] = …; static const struct dmi_system_id apu_led_dmi_table[] __initconst = …; MODULE_DEVICE_TABLE(dmi, apu_led_dmi_table); static void apu1_led_brightness_set(struct led_classdev *led, enum led_brightness value) { … } static int apu_led_config(struct device *dev, struct apu_led_pdata *apuld) { … } static int __init apu_led_probe(struct platform_device *pdev) { … } static struct platform_driver apu_led_driver = …; static int __init apu_led_init(void) { … } static void __exit apu_led_exit(void) { … } module_init(…) …; module_exit(apu_led_exit); MODULE_AUTHOR(…) …; MODULE_DESCRIPTION(…) …; MODULE_LICENSE(…) …; MODULE_ALIAS(…) …;