]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/leds/leds-lp55xx-common.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
[karo-tx-linux.git] / drivers / leds / leds-lp55xx-common.h
index 219780a2d4eb04493ebebde59a1e56f2eac47b2e..ece4761a1302bbac7d6f522e7a57e890ba9f1ae3 100644 (file)
 #ifndef _LEDS_LP55XX_COMMON_H
 #define _LEDS_LP55XX_COMMON_H
 
+enum lp55xx_engine_index {
+       LP55XX_ENGINE_INVALID,
+       LP55XX_ENGINE_1,
+       LP55XX_ENGINE_2,
+       LP55XX_ENGINE_3,
+};
+
 struct lp55xx_led;
 struct lp55xx_chip;
 
@@ -32,13 +39,18 @@ struct lp55xx_reg {
  * struct lp55xx_device_config
  * @reset              : Chip specific reset command
  * @enable             : Chip specific enable command
+ * @max_channel        : Maximum number of channels
  * @post_init_device   : Chip specific initialization code
  * @brightness_work_fn : Brightness work function
  * @set_led_current    : LED current set function
+ * @firmware_cb        : Call function when the firmware is loaded
+ * @run_engine         : Run internal engine for pattern
+ * @dev_attr_group     : Device specific attributes
  */
 struct lp55xx_device_config {
        const struct lp55xx_reg reset;
        const struct lp55xx_reg enable;
+       const int max_channel;
 
        /* define if the device has specific initialization process */
        int (*post_init_device) (struct lp55xx_chip *chip);
@@ -48,6 +60,15 @@ struct lp55xx_device_config {
 
        /* current setting function */
        void (*set_led_current) (struct lp55xx_led *led, u8 led_current);
+
+       /* access program memory when the firmware is loaded */
+       void (*firmware_cb)(struct lp55xx_chip *chip);
+
+       /* used for running firmware LED patterns */
+       void (*run_engine) (struct lp55xx_chip *chip, bool start);
+
+       /* additional device specific attributes */
+       const struct attribute_group *dev_attr_group;
 };
 
 /*
@@ -57,6 +78,8 @@ struct lp55xx_device_config {
  * @lock       : Lock for user-space interface
  * @num_leds   : Number of registered LEDs
  * @cfg        : Device specific configuration data
+ * @engine_idx : Selected engine number
+ * @fw         : Firmware data for running a LED pattern
  */
 struct lp55xx_chip {
        struct i2c_client *cl;
@@ -64,6 +87,8 @@ struct lp55xx_chip {
        struct mutex lock;      /* lock for user-space interface */
        int num_leds;
        struct lp55xx_device_config *cfg;
+       enum lp55xx_engine_index engine_idx;
+       const struct firmware *fw;
 };
 
 /*
@@ -99,4 +124,11 @@ extern void lp55xx_deinit_device(struct lp55xx_chip *chip);
 /* common LED class device functions */
 extern int lp55xx_register_leds(struct lp55xx_led *led,
                                struct lp55xx_chip *chip);
+extern void lp55xx_unregister_leds(struct lp55xx_led *led,
+                               struct lp55xx_chip *chip);
+
+/* common device attributes functions */
+extern int lp55xx_register_sysfs(struct lp55xx_chip *chip);
+extern void lp55xx_unregister_sysfs(struct lp55xx_chip *chip);
+
 #endif /* _LEDS_LP55XX_COMMON_H */