#include <linux/module.h>
#include <linux/slab.h>
#include <linux/jiffies.h>
#include <linux/i2c.h>
#include <linux/err.h>
#include <linux/mutex.h>
#include <linux/sysfs.h>
#include <linux/printk.h>
#include <linux/pm_runtime.h>
#include <linux/leds.h>
#include <linux/delay.h>
static const unsigned short normal_i2c[] = …;
static int blinkm_transfer_hw(struct i2c_client *client, int cmd);
static int blinkm_test_run(struct i2c_client *client);
struct blinkm_led { … };
#define cdev_to_blmled(c) …
struct blinkm_data { … };
#define RED …
#define GREEN …
#define BLUE …
#define BLM_GO_RGB …
#define BLM_FADE_RGB …
#define BLM_FADE_HSB …
#define BLM_FADE_RAND_RGB …
#define BLM_FADE_RAND_HSB …
#define BLM_PLAY_SCRIPT …
#define BLM_STOP_SCRIPT …
#define BLM_SET_FADE_SPEED …
#define BLM_SET_TIME_ADJ …
#define BLM_GET_CUR_RGB …
#define BLM_WRITE_SCRIPT_LINE …
#define BLM_READ_SCRIPT_LINE …
#define BLM_SET_SCRIPT_LR …
#define BLM_SET_ADDR …
#define BLM_GET_ADDR …
#define BLM_GET_FW_VER …
#define BLM_SET_STARTUP_PARAM …
static const struct { … } blinkm_cmds[17] = …;
static ssize_t show_color_common(struct device *dev, char *buf, int color)
{ … }
static int store_color_common(struct device *dev, const char *buf, int color)
{ … }
static ssize_t red_show(struct device *dev, struct device_attribute *attr,
char *buf)
{ … }
static ssize_t red_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static DEVICE_ATTR_RW(red);
static ssize_t green_show(struct device *dev, struct device_attribute *attr,
char *buf)
{ … }
static ssize_t green_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static DEVICE_ATTR_RW(green);
static ssize_t blue_show(struct device *dev, struct device_attribute *attr,
char *buf)
{ … }
static ssize_t blue_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static DEVICE_ATTR_RW(blue);
static ssize_t test_show(struct device *dev, struct device_attribute *attr,
char *buf)
{ … }
static ssize_t test_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static DEVICE_ATTR_RW(test);
static struct attribute *blinkm_attrs[] = …;
static const struct attribute_group blinkm_group = …;
static int blinkm_write(struct i2c_client *client, int cmd, u8 *arg)
{ … }
static int blinkm_read(struct i2c_client *client, int cmd, u8 *arg)
{ … }
static int blinkm_transfer_hw(struct i2c_client *client, int cmd)
{ … }
static int blinkm_led_common_set(struct led_classdev *led_cdev,
enum led_brightness value, int color)
{ … }
static int blinkm_led_red_set(struct led_classdev *led_cdev,
enum led_brightness value)
{ … }
static int blinkm_led_green_set(struct led_classdev *led_cdev,
enum led_brightness value)
{ … }
static int blinkm_led_blue_set(struct led_classdev *led_cdev,
enum led_brightness value)
{ … }
static void blinkm_init_hw(struct i2c_client *client)
{ … }
static int blinkm_test_run(struct i2c_client *client)
{ … }
static int blinkm_detect(struct i2c_client *client, struct i2c_board_info *info)
{ … }
static int blinkm_probe(struct i2c_client *client)
{ … }
static void blinkm_remove(struct i2c_client *client)
{ … }
static const struct i2c_device_id blinkm_id[] = …;
MODULE_DEVICE_TABLE(i2c, blinkm_id);
static struct i2c_driver blinkm_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;