mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 16:07:39 +00:00
33b3a561f4
LP8501 can drive up to 9 channels like LP5523. LEDs can be controlled directly via the I2C and programmable engines are supported. LP55xx common driver LP8501 is one of LP55xx family device, so LP55xx common code are used. Chip specific data is defined in the structure, 'lp55xx_device_config'. Differences between LP8501 and LP5523 Different register layout for LED output control and others. LP8501 specific feature for separate output power selection. LP8501 doesn't support external clock detection. Different programming engine data. LP8501 specific feature - output power selection Output channels are selected by power selection - Vout or Vdd. Separate power for VDD1-6 and VDD7-9 are available. It is configurable in the platform data. To support this feature, LP55xx DT structure and header are changed. Device tree binding is updated as well. LED pattern data Example pattern data is updated in the driver documentation. Signed-off-by: Milo Kim <milo.kim@ti.com> Signed-off-by: Bryan Wu <cooloney@gmail.com>
82 lines
2.1 KiB
C
82 lines
2.1 KiB
C
/*
|
|
* LP55XX Platform Data Header
|
|
*
|
|
* Copyright (C) 2012 Texas Instruments
|
|
*
|
|
* Author: Milo(Woogyom) Kim <milo.kim@ti.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* version 2 as published by the Free Software Foundation.
|
|
*
|
|
* Derived from leds-lp5521.h, leds-lp5523.h
|
|
*/
|
|
|
|
#ifndef _LEDS_LP55XX_H
|
|
#define _LEDS_LP55XX_H
|
|
|
|
/* Clock configuration */
|
|
#define LP55XX_CLOCK_AUTO 0
|
|
#define LP55XX_CLOCK_INT 1
|
|
#define LP55XX_CLOCK_EXT 2
|
|
|
|
struct lp55xx_led_config {
|
|
const char *name;
|
|
u8 chan_nr;
|
|
u8 led_current; /* mA x10, 0 if led is not connected */
|
|
u8 max_current;
|
|
};
|
|
|
|
struct lp55xx_predef_pattern {
|
|
const u8 *r;
|
|
const u8 *g;
|
|
const u8 *b;
|
|
u8 size_r;
|
|
u8 size_g;
|
|
u8 size_b;
|
|
};
|
|
|
|
enum lp8501_pwr_sel {
|
|
LP8501_ALL_VDD, /* D1~9 are connected to VDD */
|
|
LP8501_6VDD_3VOUT, /* D1~6 with VDD, D7~9 with VOUT */
|
|
LP8501_3VDD_6VOUT, /* D1~6 with VOUT, D7~9 with VDD */
|
|
LP8501_ALL_VOUT, /* D1~9 are connected to VOUT */
|
|
};
|
|
|
|
/*
|
|
* struct lp55xx_platform_data
|
|
* @led_config : Configurable led class device
|
|
* @num_channels : Number of LED channels
|
|
* @label : Used for naming LEDs
|
|
* @clock_mode : Input clock mode. LP55XX_CLOCK_AUTO or _INT or _EXT
|
|
* @setup_resources : Platform specific function before enabling the chip
|
|
* @release_resources : Platform specific function after disabling the chip
|
|
* @enable : EN pin control by platform side
|
|
* @patterns : Predefined pattern data for RGB channels
|
|
* @num_patterns : Number of patterns
|
|
* @update_config : Value of CONFIG register
|
|
*/
|
|
struct lp55xx_platform_data {
|
|
|
|
/* LED channel configuration */
|
|
struct lp55xx_led_config *led_config;
|
|
u8 num_channels;
|
|
const char *label;
|
|
|
|
/* Clock configuration */
|
|
u8 clock_mode;
|
|
|
|
/* Platform specific functions */
|
|
int (*setup_resources)(void);
|
|
void (*release_resources)(void);
|
|
void (*enable)(bool state);
|
|
|
|
/* Predefined pattern data */
|
|
struct lp55xx_predef_pattern *patterns;
|
|
unsigned int num_patterns;
|
|
|
|
/* LP8501 specific */
|
|
enum lp8501_pwr_sel pwr_sel;
|
|
};
|
|
|
|
#endif /* _LEDS_LP55XX_H */
|