New led driver compatible with Desire (Bravo) liblights
- remove all lights.*.so files from /system/lib/hw (backup if u want) and replace with lights.qsd8k.so from Bravo ROM or download from http://www.multiupload.com/2M5T02M3TU
- if button backlight don’t work: turn screen on, press any key and put phone under bright light ( this should activate light sensor and backlight)
Conflicts:
arch/arm/configs/htcleo_defconfig
arch/arm/mach-msm/board-htcleo.h
Add commit from 654ce990ab
This commit is contained in:
parent
0e29cb4fa1
commit
0162818a8a
@ -202,9 +202,7 @@ CONFIG_ARCH_MSM=y
|
||||
CONFIG_ARCH_QSD8X50=y
|
||||
CONFIG_ARCH_MSM_SCORPION=y
|
||||
CONFIG_MSM_MDP31=y
|
||||
CONFIG_PERFLOCK=y
|
||||
CONFIG_PERFLOCK_BOOT_LOCK=y
|
||||
# CONFIG_PERFLOCK_SCREEN_POLICY is not set
|
||||
# CONFIG_PERFLOCK is not set
|
||||
CONFIG_MSM_AMSS_VERSION=1550
|
||||
# CONFIG_MSM_AMSS_VERSION_6210 is not set
|
||||
# CONFIG_MSM_AMSS_VERSION_6220 is not set
|
||||
@ -239,8 +237,8 @@ CONFIG_MACH_HTCLEO=y
|
||||
# CONFIG_MACH_INCREDIBLE is not set
|
||||
# CONFIG_MACH_INCREDIBLEC is not set
|
||||
# CONFIG_MACH_SUPERSONIC is not set
|
||||
# CONFIG_HTC_BATTCHG_SMEM is not set
|
||||
CONFIG_HTC_BATTCHG=y
|
||||
# CONFIG_HTC_BATTCHG_SMEM is not set
|
||||
# CONFIG_HTC_PWRSINK is not set
|
||||
CONFIG_HTC_SLEEP_MODE_GPIO_DUMP=y
|
||||
# CONFIG_HTC_POWER_COLLAPSE_MAGIC is not set
|
||||
|
@ -123,7 +123,7 @@ obj-$(CONFIG_MACH_HTCLEO) += board-htcleo-ts.o board-htcleo-mmc.o ieee754-df.o
|
||||
|
||||
obj-$(CONFIG_MACH_HTCLEO) += board-htcleo-audio.o board-htcleo-acoustic.o
|
||||
obj-$(CONFIG_MACH_HTCLEO) += board-htcleo-rfkill.o board-htcleo-wifi.o board-htcleo-microp.o
|
||||
obj-$(CONFIG_MACH_HTCLEO) += board-htcleo-proximity.o board-htcleo-leds.o board-htcleo-ls.o
|
||||
obj-$(CONFIG_MACH_HTCLEO) += board-htcleo-proximity.o board-htcleo-ls.o
|
||||
obj-$(CONFIG_MACH_HTCLEO) += clock-wince.o
|
||||
obj-$(CONFIG_HTCLEO_BACKLIGHT) += board-htcleo-bl.o
|
||||
obj-$(CONFIG_HTCLEO_BACKLIGHT_LED) += board-htcleo-bl-led.o
|
||||
|
@ -144,6 +144,7 @@ static int i2c_write_block(struct i2c_client *client, uint8_t addr,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_MACH_HTCLEO
|
||||
int microp_i2c_read(uint8_t addr, uint8_t *data, int length)
|
||||
{
|
||||
struct i2c_client *client = private_microp_client;
|
||||
@ -179,6 +180,7 @@ int microp_i2c_write(uint8_t addr, uint8_t *data, int length)
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(microp_i2c_write);
|
||||
#endif
|
||||
|
||||
void microp_mobeam_enable(int enable)
|
||||
{
|
||||
@ -234,6 +236,7 @@ int microp_write_interrupt(struct i2c_client *client,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_MACH_HTCLEO
|
||||
int microp_set_adc_req(uint8_t value)
|
||||
{
|
||||
struct i2c_client *client;
|
||||
@ -274,6 +277,7 @@ int microp_get_remote_adc(uint32_t *val)
|
||||
printk("remote adc %d\n", *val);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int microp_read_adc(uint8_t *data)
|
||||
{
|
||||
@ -360,6 +364,7 @@ static int microp_spi_enable(struct i2c_client *client, uint8_t enable)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_MACH_HTCLEO
|
||||
int microp_spi_vote_enable(int spi_device, uint8_t enable)
|
||||
{
|
||||
struct i2c_client *client = private_microp_client;
|
||||
@ -410,6 +415,7 @@ exit:
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(microp_spi_vote_enable);
|
||||
#endif
|
||||
|
||||
static void microp_reset_microp(struct i2c_client *client)
|
||||
{
|
||||
|
@ -62,6 +62,7 @@
|
||||
#include "proc_comm.h"
|
||||
#include "dex_comm.h"
|
||||
|
||||
|
||||
#define ATAG_MAGLDR_BOOT 0x4C47414D
|
||||
struct tag_magldr_entry
|
||||
{
|
||||
@ -191,6 +192,27 @@ static struct akm8973_platform_data compass_platform_data =
|
||||
.intr = HTCLEO_GPIO_COMPASS_INT_N,
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// LED Driver (drivers/leds/leds-microp.c - Atmega microp driver
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
static struct microp_led_config led_config[] = {
|
||||
{
|
||||
.name = "amber",
|
||||
.type = LED_RGB,
|
||||
},
|
||||
{
|
||||
.name = "green",
|
||||
.type = LED_RGB,
|
||||
},
|
||||
};
|
||||
|
||||
static struct microp_led_platform_data microp_leds_data = {
|
||||
.num_leds = ARRAY_SIZE(led_config),
|
||||
.led_config = led_config,
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Microp
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
@ -216,8 +238,12 @@ static struct platform_device microp_devices[] = {
|
||||
.id = -1,
|
||||
},
|
||||
{
|
||||
.name = "htcleo-leds",
|
||||
.name = "leds-microp",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = µp_leds_data,
|
||||
},
|
||||
|
||||
},
|
||||
{
|
||||
.name = "htcleo-lsensor",
|
||||
|
@ -176,6 +176,25 @@
|
||||
#define HTCLEO_TPS65023_MIN_UV_MV (800)
|
||||
#define HTCLEO_TPS65023_MAX_UV_MV (1350)
|
||||
|
||||
/* LEDS */
|
||||
#define LED_RGB (1 << 0)
|
||||
struct microp_led_config {
|
||||
const char *name;
|
||||
uint32_t type;
|
||||
uint8_t init_value;
|
||||
uint8_t fade_time;
|
||||
uint16_t led_pin;
|
||||
uint8_t mask_w[3];
|
||||
};
|
||||
|
||||
struct microp_led_platform_data {
|
||||
struct microp_led_config *led_config;
|
||||
int num_leds;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
int htcleo_pm_set_vreg(int enable, unsigned id);
|
||||
int __init htcleo_init_panel(void);
|
||||
int htcleo_is_nand_boot(void);
|
||||
|
@ -30,7 +30,7 @@ obj-$(CONFIG_LEDS_DA903X) += leds-da903x.o
|
||||
obj-$(CONFIG_LEDS_WM831X_STATUS) += leds-wm831x-status.o
|
||||
obj-$(CONFIG_LEDS_WM8350) += leds-wm8350.o
|
||||
obj-$(CONFIG_LEDS_PWM) += leds-pwm.o
|
||||
obj-$(CONFIG_MICROP_COMMON) += leds-microp.o
|
||||
obj-$(CONFIG_MACH_HTCLEO) += leds-microp.o
|
||||
obj-$(CONFIG_LEDS_PM8058) += leds-pm8058.o
|
||||
|
||||
# LED SPI Drivers
|
||||
|
162
drivers/leds/leds-microp.c
Normal file → Executable file
162
drivers/leds/leds-microp.c
Normal file → Executable file
@ -1,6 +1,7 @@
|
||||
/* include/asm/mach-msm/leds-microp.c
|
||||
*
|
||||
* Copyright (C) 2009 HTC Corporation.
|
||||
* Copyright (C) 2010 Danijel Posilovic - dan1j3l
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
@ -13,7 +14,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MICROP_COMMON
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/leds.h>
|
||||
@ -22,42 +22,106 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <mach/atmega_microp.h>
|
||||
|
||||
static int microp_write_led_mode(struct led_classdev *led_cdev,
|
||||
uint8_t mode, uint16_t off_timer)
|
||||
{
|
||||
int gl_state = 0; // Green led last state
|
||||
int al_state = 0; // Amber led last state
|
||||
|
||||
static int microp_write_led_mode(struct led_classdev *led_cdev,uint8_t mode, uint16_t off_timer){
|
||||
|
||||
struct microp_led_data *ldata;
|
||||
uint8_t data[7];
|
||||
int ret;
|
||||
|
||||
ldata = container_of(led_cdev, struct microp_led_data, ldev);
|
||||
|
||||
//pr_warning("LEDS: set led: %s, mode: %d, brightness:%d\n", ldata->ldev.name, mode,ldata->brightness);
|
||||
|
||||
if (!strcmp(ldata->ldev.name, "green")) {
|
||||
data[0] = 0x01;
|
||||
data[1] = mode;
|
||||
data[2] = off_timer >> 8;
|
||||
data[3] = off_timer & 0xFF;
|
||||
data[4] = 0x00;
|
||||
data[5] = 0x00;
|
||||
data[6] = 0x00;
|
||||
|
||||
switch (mode){
|
||||
case 0:
|
||||
case 1:
|
||||
if (ldata->brightness){
|
||||
//pr_warning("LEDS: turning on green\n");
|
||||
data[1] = 0x01;
|
||||
gl_state = 1;
|
||||
al_state = 0;
|
||||
}else{
|
||||
|
||||
if (gl_state !=0){ // Only reset led if green is on, and vice versa
|
||||
//pr_warning("LEDS: turning off green\n");
|
||||
data[1] = 0x00;
|
||||
gl_state = 0;
|
||||
}else{
|
||||
//pr_warning("LEDS: braking green\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // Slow blink
|
||||
data[1] = 0x03;
|
||||
gl_state = 1;
|
||||
al_state = 0;
|
||||
break;
|
||||
|
||||
case 3: // Fast blink
|
||||
data[1] = 0x04;
|
||||
gl_state = 1;
|
||||
al_state = 0;
|
||||
break;
|
||||
|
||||
case 4: // Green / Amber
|
||||
data[0] = 0x10;
|
||||
data[1] = 0x10;
|
||||
gl_state = 1;
|
||||
al_state = 0;
|
||||
break;
|
||||
}
|
||||
} else if (!strcmp(ldata->ldev.name, "amber")) {
|
||||
data[0] = 0x02;
|
||||
data[1] = 0x00;
|
||||
data[2] = 0x00;
|
||||
data[3] = 0x00;
|
||||
data[4] = mode;
|
||||
data[5] = off_timer >> 8;
|
||||
data[6] = off_timer & 0xFF;
|
||||
} else if (!strcmp(ldata->ldev.name, "blue")) {
|
||||
data[0] = 0x04;
|
||||
data[1] = mode;
|
||||
data[2] = off_timer >> 8;
|
||||
data[3] = off_timer & 0xFF;
|
||||
data[4] = 0x00;
|
||||
data[5] = 0x00;
|
||||
data[6] = 0x00;
|
||||
|
||||
switch (mode){
|
||||
case 0:
|
||||
case 1:
|
||||
if (ldata->brightness){
|
||||
data[1] = 0x02;
|
||||
al_state = 1;
|
||||
gl_state = 0;
|
||||
//pr_warning("LEDS: turning on amber\n");
|
||||
}else{
|
||||
if (al_state !=0){
|
||||
//pr_warning("LEDS: turning off amber\n");
|
||||
data[1] = 0x00;
|
||||
al_state = 0;
|
||||
}else{
|
||||
//pr_warning("LEDS: breaking amber\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // Amber fast flash
|
||||
data[1] = 0x05;
|
||||
al_state = 1;
|
||||
gl_state = 0;
|
||||
break;
|
||||
|
||||
case 3: // Green / Amber
|
||||
data[0] = 0x10;
|
||||
data[1] = 0x10;
|
||||
al_state = 1;
|
||||
gl_state = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ret = microp_i2c_write(MICROP_I2C_WCMD_LED_MODE, data, 7);
|
||||
// Other default settings
|
||||
data[2] = off_timer >> 8;
|
||||
data[3] = off_timer & 0xFF;
|
||||
data[4] = 0x00;
|
||||
data[5] = 0x00;
|
||||
data[6] = 0x00;
|
||||
|
||||
ret = microp_i2c_write(MICROP_I2C_WCMD_LED_CTRL, data, 7);
|
||||
if (ret == 0) {
|
||||
mutex_lock(&ldata->led_data_mutex);
|
||||
if (mode > 1)
|
||||
@ -68,9 +132,8 @@ static int microp_write_led_mode(struct led_classdev *led_cdev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void microp_led_brightness_set(struct led_classdev *led_cdev,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
static void microp_led_brightness_set(struct led_classdev *led_cdev,enum led_brightness brightness){
|
||||
|
||||
struct microp_led_data *ldata;
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
@ -96,9 +159,8 @@ static void microp_led_brightness_set(struct led_classdev *led_cdev,
|
||||
pr_err("%s: led_brightness_set failed to set mode\n", __func__);
|
||||
}
|
||||
|
||||
static void microp_led_jogball_brightness_set(struct led_classdev *led_cdev,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
static void microp_led_jogball_brightness_set(struct led_classdev *led_cdev,enum led_brightness brightness){
|
||||
|
||||
struct microp_led_data *ldata;
|
||||
unsigned long flags;
|
||||
uint8_t data[3] = {0, 0, 0};
|
||||
@ -136,15 +198,12 @@ static void microp_led_jogball_brightness_set(struct led_classdev *led_cdev,
|
||||
pr_err("%s failed on set jogball mode:0x%2.2X\n", __func__, data[0]);
|
||||
}
|
||||
|
||||
static void microp_led_mobeam_brightness_set(struct led_classdev *led_cdev,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
static void microp_led_mobeam_brightness_set(struct led_classdev *led_cdev,enum led_brightness brightness){
|
||||
;
|
||||
}
|
||||
|
||||
static void microp_led_wimax_brightness_set(struct led_classdev *led_cdev,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
static void microp_led_wimax_brightness_set(struct led_classdev *led_cdev,enum led_brightness brightness){
|
||||
|
||||
struct microp_led_data *ldata;
|
||||
unsigned long flags;
|
||||
uint8_t data[3] = {0, 0, 0};
|
||||
@ -275,24 +334,21 @@ static ssize_t microp_led_blink_store(struct device *dev,
|
||||
ldata = container_of(led_cdev, struct microp_led_data, ldev);
|
||||
|
||||
mutex_lock(&ldata->led_data_mutex);
|
||||
//pr_warning("LEDS: read blink: led: %s, value: %d",ldata->ldev.name,val);
|
||||
switch (val) {
|
||||
case 0: /* stop flashing */
|
||||
case 1:
|
||||
ldata->blink = 0;
|
||||
if (led_cdev->brightness)
|
||||
mode = 1;
|
||||
else
|
||||
mode = 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
mode = val + 1;
|
||||
break;
|
||||
case 4:
|
||||
if (!strcmp(ldata->ldev.name, "amber")) {
|
||||
mode = val + 1;
|
||||
break;
|
||||
}
|
||||
mode = val;
|
||||
break;
|
||||
default:
|
||||
mutex_unlock(&ldata->led_data_mutex);
|
||||
return -EINVAL;
|
||||
@ -426,6 +482,8 @@ static ssize_t microp_jogball_color_store(struct device *dev,
|
||||
|
||||
static DEVICE_ATTR(color, 0644, NULL, microp_jogball_color_store);
|
||||
|
||||
|
||||
#ifdef CONFIG_MICROP_COMMON
|
||||
static ssize_t microp_mobeam_read_status_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
@ -447,7 +505,7 @@ static ssize_t microp_mobeam_download_store(struct device *dev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
int i, ret, num;
|
||||
uint8_t data[73] ; /* Size of cbitstream array MAX 73 bytes. */
|
||||
uint8_t data[73] ; // Size of cbitstream array MAX 73 bytes.
|
||||
|
||||
pr_info("%s\n", __func__);
|
||||
memset(data, 0x00, sizeof(data));
|
||||
@ -546,7 +604,7 @@ pr_info("%s\n", __func__);
|
||||
return count;
|
||||
}
|
||||
static DEVICE_ATTR(stop_led, 0644, NULL, microp_mobeam_stop_led);
|
||||
|
||||
#endif
|
||||
|
||||
static int microp_led_probe(struct platform_device *pdev)
|
||||
{
|
||||
@ -634,6 +692,7 @@ static int microp_led_probe(struct platform_device *pdev)
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MICROP_COMMON
|
||||
for (i = 0; i < pdata->num_leds; i++) {
|
||||
if (pdata->led_config[i].type != LED_MOBEAM)
|
||||
continue;
|
||||
@ -678,10 +737,12 @@ static int microp_led_probe(struct platform_device *pdev)
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
pr_info("%s: succeeded\n", __func__);
|
||||
return 0;
|
||||
|
||||
|
||||
#ifdef CONFIG_MICROP_COMMON
|
||||
err_create_mo_stop_attr_file:
|
||||
device_remove_file(ldata[i].ldev.dev, &dev_attr_mobeam_enable);
|
||||
err_create_mo_enable_attr_file:
|
||||
@ -692,6 +753,8 @@ err_create_mo_send_attr_file:
|
||||
device_remove_file(ldata[i].ldev.dev, &dev_attr_data_download);
|
||||
err_create_mo_download_attr_file:
|
||||
i = pdata->num_leds;
|
||||
#endif
|
||||
|
||||
err_register_attr_color:
|
||||
for (i--; i >= 0; i--) {
|
||||
if (pdata->led_config[i].type != LED_JOGBALL)
|
||||
@ -773,5 +836,4 @@ module_exit(microp_led_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Atmega MicroP led driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
#endif /* end of #ifdef CONFIG_MICROP_COMMON*/
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user