-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 358594 b: refs/heads/master c: c93d08f h: refs/heads/master v: v3
- Loading branch information
Milo(Woogyom) Kim
authored and
Bryan Wu
committed
Feb 6, 2013
1 parent
749082d
commit 8d6a4d3
Showing
6 changed files
with
218 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: f6c64c6fc8d793b414446f1a655a37b7bfce68e3 | ||
refs/heads/master: c93d08fa75020835741c7b1d0523ff854e8acde1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* | ||
* LP5521/LP5523/LP55231 Common Driver | ||
* | ||
* Copyright 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.c, leds-lp5523.c | ||
*/ | ||
|
||
#include <linux/i2c.h> | ||
#include <linux/leds.h> | ||
#include <linux/module.h> | ||
#include <linux/platform_data/leds-lp55xx.h> | ||
|
||
#include "leds-lp55xx-common.h" | ||
|
||
int lp55xx_write(struct lp55xx_chip *chip, u8 reg, u8 val) | ||
{ | ||
return i2c_smbus_write_byte_data(chip->cl, reg, val); | ||
} | ||
EXPORT_SYMBOL_GPL(lp55xx_write); | ||
|
||
int lp55xx_read(struct lp55xx_chip *chip, u8 reg, u8 *val) | ||
{ | ||
s32 ret; | ||
|
||
ret = i2c_smbus_read_byte_data(chip->cl, reg); | ||
if (ret < 0) | ||
return ret; | ||
|
||
*val = ret; | ||
return 0; | ||
} | ||
EXPORT_SYMBOL_GPL(lp55xx_read); | ||
|
||
int lp55xx_update_bits(struct lp55xx_chip *chip, u8 reg, u8 mask, u8 val) | ||
{ | ||
int ret; | ||
u8 tmp; | ||
|
||
ret = lp55xx_read(chip, reg, &tmp); | ||
if (ret) | ||
return ret; | ||
|
||
tmp &= ~mask; | ||
tmp |= val & mask; | ||
|
||
return lp55xx_write(chip, reg, tmp); | ||
} | ||
EXPORT_SYMBOL_GPL(lp55xx_update_bits); | ||
|
||
MODULE_AUTHOR("Milo Kim <milo.kim@ti.com>"); | ||
MODULE_DESCRIPTION("LP55xx Common Driver"); | ||
MODULE_LICENSE("GPL"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
/* | ||
* LP55XX Common Driver 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.c, leds-lp5523.c | ||
*/ | ||
|
||
#ifndef _LEDS_LP55XX_COMMON_H | ||
#define _LEDS_LP55XX_COMMON_H | ||
|
||
struct lp55xx_led; | ||
struct lp55xx_chip; | ||
|
||
/* | ||
* struct lp55xx_chip | ||
* @cl : I2C communication for access registers | ||
* @pdata : Platform specific data | ||
* @lock : Lock for user-space interface | ||
* @num_leds : Number of registered LEDs | ||
*/ | ||
struct lp55xx_chip { | ||
struct i2c_client *cl; | ||
struct lp55xx_platform_data *pdata; | ||
struct mutex lock; /* lock for user-space interface */ | ||
int num_leds; | ||
}; | ||
|
||
/* | ||
* struct lp55xx_led | ||
* @chan_nr : Channel number | ||
* @cdev : LED class device | ||
* @led_current : Current setting at each led channel | ||
* @max_current : Maximun current at each led channel | ||
* @brightness_work : Workqueue for brightness control | ||
* @brightness : Brightness value | ||
* @chip : The lp55xx chip data | ||
*/ | ||
struct lp55xx_led { | ||
int chan_nr; | ||
struct led_classdev cdev; | ||
u8 led_current; | ||
u8 max_current; | ||
struct work_struct brightness_work; | ||
u8 brightness; | ||
struct lp55xx_chip *chip; | ||
}; | ||
|
||
/* register access */ | ||
extern int lp55xx_write(struct lp55xx_chip *chip, u8 reg, u8 val); | ||
extern int lp55xx_read(struct lp55xx_chip *chip, u8 reg, u8 *val); | ||
extern int lp55xx_update_bits(struct lp55xx_chip *chip, u8 reg, | ||
u8 mask, u8 val); | ||
|
||
#endif /* _LEDS_LP55XX_COMMON_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
/* | ||
* 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 | ||
|
||
/* Bits in LP5521 CONFIG register. 'update_config' in lp55xx_platform_data */ | ||
#define LP5521_PWM_HF 0x40 /* PWM: 0 = 256Hz, 1 = 558Hz */ | ||
#define LP5521_PWRSAVE_EN 0x20 /* 1 = Power save mode */ | ||
#define LP5521_CP_MODE_OFF 0 /* Charge pump (CP) off */ | ||
#define LP5521_CP_MODE_BYPASS 8 /* CP forced to bypass mode */ | ||
#define LP5521_CP_MODE_1X5 0x10 /* CP forced to 1.5x mode */ | ||
#define LP5521_CP_MODE_AUTO 0x18 /* Automatic mode selection */ | ||
#define LP5521_R_TO_BATT 4 /* R out: 0 = CP, 1 = Vbat */ | ||
#define LP5521_CLK_SRC_EXT 0 /* Ext-clk source (CLK_32K) */ | ||
#define LP5521_CLK_INT 1 /* Internal clock */ | ||
#define LP5521_CLK_AUTO 2 /* Automatic clock selection */ | ||
|
||
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 { | ||
u8 *r; | ||
u8 *g; | ||
u8 *b; | ||
u8 size_r; | ||
u8 size_g; | ||
u8 size_b; | ||
}; | ||
|
||
/* | ||
* 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; | ||
|
||
/* _CONFIG register */ | ||
u8 update_config; | ||
}; | ||
|
||
#endif /* _LEDS_LP55XX_H */ |