#include <linux/delay.h>
#include <linux/io.h>
#include <linux/leds.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_device.h>
#include <linux/spinlock.h>
#define BCM63138_MAX_LEDS …
#define BCM63138_MAX_BRIGHTNESS …
#define BCM63138_LED_BITS …
#define BCM63138_LED_MASK …
#define BCM63138_LEDS_PER_REG …
#define BCM63138_GLB_CTRL …
#define BCM63138_GLB_CTRL_SERIAL_LED_DATA_PPOL …
#define BCM63138_GLB_CTRL_SERIAL_LED_EN_POL …
#define BCM63138_MASK …
#define BCM63138_HW_LED_EN …
#define BCM63138_SERIAL_LED_SHIFT_SEL …
#define BCM63138_FLASH_RATE_CTRL1 …
#define BCM63138_FLASH_RATE_CTRL2 …
#define BCM63138_FLASH_RATE_CTRL3 …
#define BCM63138_FLASH_RATE_CTRL4 …
#define BCM63138_BRIGHT_CTRL1 …
#define BCM63138_BRIGHT_CTRL2 …
#define BCM63138_BRIGHT_CTRL3 …
#define BCM63138_BRIGHT_CTRL4 …
#define BCM63138_POWER_LED_CFG …
#define BCM63138_HW_POLARITY …
#define BCM63138_SW_DATA …
#define BCM63138_SW_POLARITY …
#define BCM63138_PARALLEL_LED_POLARITY …
#define BCM63138_SERIAL_LED_POLARITY …
#define BCM63138_HW_LED_STATUS …
#define BCM63138_FLASH_CTRL_STATUS …
#define BCM63138_FLASH_BRT_CTRL …
#define BCM63138_FLASH_P_LED_OUT_STATUS …
#define BCM63138_FLASH_S_LED_OUT_STATUS …
struct bcm63138_leds { … };
struct bcm63138_led { … };
static void bcm63138_leds_write(struct bcm63138_leds *leds, unsigned int reg,
u32 data)
{ … }
static unsigned long bcm63138_leds_read(struct bcm63138_leds *leds,
unsigned int reg)
{ … }
static void bcm63138_leds_update_bits(struct bcm63138_leds *leds,
unsigned int reg, u32 mask, u32 val)
{ … }
static void bcm63138_leds_set_flash_rate(struct bcm63138_leds *leds,
struct bcm63138_led *led,
u8 value)
{ … }
static void bcm63138_leds_set_bright(struct bcm63138_leds *leds,
struct bcm63138_led *led,
u8 value)
{ … }
static void bcm63138_leds_enable_led(struct bcm63138_leds *leds,
struct bcm63138_led *led,
enum led_brightness value)
{ … }
static void bcm63138_leds_brightness_set(struct led_classdev *led_cdev,
enum led_brightness value)
{ … }
static int bcm63138_leds_blink_set(struct led_classdev *led_cdev,
unsigned long *delay_on,
unsigned long *delay_off)
{ … }
static void bcm63138_leds_create_led(struct bcm63138_leds *leds,
struct device_node *np)
{ … }
static int bcm63138_leds_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id bcm63138_leds_of_match_table[] = …;
static struct platform_driver bcm63138_leds_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_DEVICE_TABLE(of, bcm63138_leds_of_match_table);