blob: ceb0deaa6c878fc63d391adb3628ea59ea102e2e [file] [log] [blame]
/*
* include/linux/i2c_lm8502_led.h
*
* Copyright (C) 2008 Palm Inc,
*
* 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.
*
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* Authors: Kevin McCray (kevin.mccray@palm.com)
* Brian Xiong (brian.xiong@palm.com)
* Amon Xie(amon.xie@palm.com)
*
*/
#ifndef _LM8502_H
#define _LM8502_H
#include <linux/i2c.h>
#include <linux/leds.h>
#define LED_OFF 0
#define LED_ON 1
#define MISC_POWER_SAVE_ON (1 << 5)
#define MISC_POWER_SAVE_OFF (0 << 5)
#define LM8502_I2C_DEVICE "LM8502"
#define LM8502_I2C_DRIVER "LM8502"
#define LM8502_I2C_ADDR 0x33
/*ioctl codes */
#define LM8502_DOWNLOAD_MICROCODE 1
#define LM8502_START_ENGINE 9
#define LM8502_STOP_ENGINE 3
#define LM8502_WAIT_FOR_INTERRUPT 4
#define LM8502_CONFIGURE_MEMORY 5
#define LM8502_STOP_ENGINE_AFTER_INTERRUPT 6
#define LM8502_READ_PWM 7
#define LM8502_WAIT_FOR_ENGINE_STOPPED 8
#define LM8502_CONFIG_MAX_CURRENT 10
/* lm8502 LED platform data structure */
enum {
LED_GRP_1 = 0,
LED_GRP_2,
LED_GRP_3,
LED_GRP_4,
LED_GRP_5,
LED_GRP_6,
LED_GRP_7,
LED_GRP_8,
LED_GRP_9,
LED_GRP_10,
};
enum {
LED_HW_GRP_NONE = 0,
LED_HW_GRP_1,
LED_HW_GRP_2,
LED_HW_GRP_3,
};
enum {
LED_NONE = 0,
LED_RED,
LED_GREEN,
LED_BLUE,
LED_WHITE,
};
struct lm8502_read_pwm {
u8 led;
u8 value;
};
struct led_cfg {
int type;
u8 current_addr;
u8 control_addr;
};
struct lm8502_memory_config {
int eng1_startpage;
int eng1_endpage;
int eng2_startpage;
int eng2_endpage;
};
struct lm8502_led_config {
struct led_classdev cdev;
struct i2c_client *client;
struct led_cfg *led_list;
struct work_struct brightness_work;
int nleds;
int brightness;
int group_id;
int hw_group;
u8 default_max_current;
int default_brightness;
int default_state;
};
struct lm8502_platform_data {
int enable_gpio;
int interrupt_gpio;
int strobe_gpio;
u8 vib_default_duty_cycle;
u8 vib_default_direction;
u8 vib_invert_direction;
u16 flash_default_duration;
u16 flash_default_current;
u16 torch_default_current;
void (*select_flash) (struct i2c_client* client);
void (*select_vibrator) (struct i2c_client* client);
struct lm8502_led_config *leds;
struct lm8502_memory_config *memcfg;
int nleds;
u8 power_mode;
char *dev_name;
};
int lm8502_set_current(uint8_t is_flash_mode, uint32_t mA);
#endif // _LM8502_H