mtk 充电闪光指示灯
平台 mtk 6572 kaios
根据原理图 引脚为 FLASH_LED对应 GPIO140根据原理图,该灯是输出低电平点亮 用的供电是ISINK0
Q:\kaios_72_normal\kernel-3.4\arch\arm\mach-mt6572\fise6572_kais_k\leds\mt65xx\cust_leds.c
static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {
#if defined (CONFIG_FISE_PROJECT_U7261)
{"red", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0, {0}},
{"green", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0, {0}},
{"blue", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0, {0}},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1, {0}},
{"button-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK3, {0}},
{"lcd-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_LCD_ISINK, {0}},
#elif defined (CONFIG_FISE_PROJECT_U7210)//pangjw 2019.7.2
{"blue", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0, {0}},//定义为ISINK0供电
{"green", MT65XX_LED_MODE_NONE, -1, {0}},
{"red", MT65XX_LED_MODE_NONE, -1, {0}},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1, {0}},
{"button-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"lcd-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_LCD_ISINK, {0}},
#else
{"red", MT65XX_LED_MODE_NONE, -1, {0}},
{"green", MT65XX_LED_MODE_NONE, -1, {0}},
{"blue", MT65XX_LED_MODE_NONE, -1, {0}},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1, {0}},
{"button-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"lcd-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_LCD_ISINK, {0}},
#endif
};
}
Q:\kaios_72_normal\vendor\mediatek\proprietary\bootable\bootloader\lk\target\fise6572_kais_k\cust_leds.c
static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {
#if defined (FISE_PROJECT_U7261) //fise-driver dweizheng 20190110
{"red", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0, {0}},
{"green", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0, {0}},
{"blue", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0, {0}},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1, {0}},
{"button-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK3, {0}},
{"lcd-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_LCD_ISINK, {0}},
#elif defined (FISE_PROJECT_U7210)//pangjw 2019.7.2
{"blue", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0, {0}},
{"green", MT65XX_LED_MODE_NONE, -1, {0}},
{"red", MT65XX_LED_MODE_NONE, -1, {0}},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1, {0}},
{"button-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"lcd-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_LCD_ISINK, {0}},
#else
{"red", MT65XX_LED_MODE_NONE, -1, {0}},
{"green", MT65XX_LED_MODE_NONE, -1, {0}},
{"blue", MT65XX_LED_MODE_NONE, -1, {0}},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1, {0}},
{"button-backlight", MT65XX_LED_MODE_NONE, -1, {0}},
{"lcd-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_LCD_ISINK, {0}},
#endif
};
//MT65XX_LED_MODE_PMIC和MT65XX_LED_PMIC_NLED_ISINK0
定义在Q:\kaios_72_normal\kernel-3.4\drivers\misc\mediatek\leds\mt6572\leds.c
Q:\kaios_72_normal\kernel-3.4\drivers\leds\mediatek\leds_drv.c
#define charging_lamp_gpio GPIO140
#define electric_torch_gpio GPIO77
static unsigned int charging_led_enable;
static unsigned long delayon = 512;
static unsigned long delayoff = 512;
static unsigned int torch_led_enable;
static ssize_t store_charging_led(struct device *dev, struct device_attribute *attr ,const char *buf,size_t size) //控制led闪烁
{
char *pvalue = NULL;
unsigned int charging_led;
struct cust_mt65xx_led *cust_led_list =get_cust_led_list();
struct nled_setting led_tmp_seting;
led_tmp_seting.nled_mode = NLED_BLINK;
led_tmp_seting.blink_off_time = delayoff;
led_tmp_seting.blink_on_time = delayon;
struct led_classdev *led_cdev = dev_get_drvdata(dev);
if(buf != NULL && size != 0)
{
charging_led = simple_strtoul(buf,&pvalue,10);
if(charging_led == 1)
{
mt_set_gpio_out(charging_lamp_gpio,1);
charging_led_enable = 1;
mt_led_blink_pmic(MT65XX_LED_PMIC_NLED_ISINK0, &led_tmp_seting);
//led_set_pwm(PWM1, &led_tmp_seting);
}
if(charging_led == 0)
{
mt_set_gpio_out(charging_lamp_gpio,0);
charging_led_enable = 0;
mt65xx_led_set(led_cdev,0);
}
}
return size;
}
static ssize_t show_charging_led(struct device *dev,struct device_attribute *attr, char *buf)
{
return sprintf( buf,"%u\n",charging_led_enable);
}
static DEVICE_ATTR (charging_led, 0664, show_charging_led, store_charging_led);
static ssize_t store_delay_on(struct device *dev,struct device_attribute *attr,const char *buf,size_t size)
{
char *pvalue = NULL;
unsigned int delay_on = 0;
if(buf != NULL && size != 0)
{
delay_on = simple_strtoul(buf,&pvalue,10);
delayon = delay_on;
}
return size;
}
static ssize_t show_delay_on(struct device *dev,struct device_attribute *attr,char *buf)
{
unsigned int delay_on = delayon;
return sprintf(buf,"%u\n" ,delay_on);
}
static DEVICE_ATTR(delay_on,0664, show_delay_on,store_delay_on);
static ssize_t store_delay_off(struct device *dev,struct device_attribute *attr,const char *buf,size_t size)
{
char *pvalue = NULL;
unsigned int delay_off = 0;
if(buf != NULL && size != 0)
{
delay_off = simple_strtoul(buf,&pvalue,10);
delayoff = delay_off;
}
return size;
}
static ssize_t show_delay_off(struct device *dev,struct device_attribute *attr,char *buf)
{
unsigned int delay_off = delayoff;
return sprintf(buf,"%u\n" ,delay_off);
}
static DEVICE_ATTR(delay_off,0664, show_delay_off,store_delay_off);
static ssize_t store_torch_led(struct device *dev, struct device_attribute *attr ,const char *buf,size_t size)
{
char *pvalue = NULL;
unsigned int torch_led;
if(buf != NULL && size != 0)
{
torch_led = simple_strtoul(buf,&pvalue,10);
if(torch_led == 1)
{
mt_set_gpio_out(electric_torch_gpio,1);
torch_led_enable = 1;
}
if(torch_led == 0)
{
mt_set_gpio_out(electric_torch_gpio,0);
torch_led_enable = 0;
}
}
return size;
}
static ssize_t show_torch_led(struct device *dev,struct device_attribute *attr, char *buf)
{
return sprintf(buf,"%u\n",torch_led_enable);
}
static DEVICE_ATTR (torch_led, 0664, show_torch_led, store_torch_led);
static int __init mt65xx_leds_probe(struct platform_device *pdev)
{
#if defined (CONFIG_FISE_PROJECT_U7210)
if(strcmp(g_leds_data[i]->cdev.name,"blue")==0)//创建各个节点如charging_led delay_off delay_on
{
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_charging_led);
if(rc)
{
LEDS_DRV_DEBUG("[charging_led] device create file duty fail!\n");
}
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_delay_on);
if(rc)
{
LEDS_DRV_DEBUG("[delay_on] device create file duty fail!\n");
}
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_delay_off);
if(rc)
{
LEDS_DRV_DEBUG("[delay_off] device create file duty fail!\n");
}
//brightness_set_pmic(MT65XX_LED_PMIC_NLED_ISINK3,255, 0);
//mt_set_gpio_mode(charging_lamp_gpio, GPIO_MODE_00);
mt_set_gpio_dir(charging_lamp_gpio, GPIO_DIR_OUT);
mt_set_gpio_out(charging_lamp_gpio, GPIO_OUT_ONE);
//mt65xx_led_set_cust(&cust_led_list[0],0);
#if 1
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_torch_led);
if(rc)
{
LEDS_DRV_DEBUG("[torch_led] device create file duty fail!\n");
}
//mt_set_gpio_mode(electric_torch_gpio, GPIO_MODE_00);
mt_set_gpio_dir(electric_torch_gpio, GPIO_DIR_OUT);
mt_set_gpio_out(electric_torch_gpio, GPIO_OUT_ONE);
#endif
}
if(strcmp(g_leds_data[i]->cdev.name,"lcd-backlight") == 0)
{
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_duty);
if(rc)
{
LEDS_DRV_DEBUG("[LED]device_create_file duty fail!\n");
}
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_div);
if(rc)
{
LEDS_DRV_DEBUG("[LED]device_create_file duty fail!\n");
}
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_frequency);
if(rc)
{
LEDS_DRV_DEBUG("[LED]device_create_file duty fail!\n");
}
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_pwm_register);
if(rc)
{
LEDS_DRV_DEBUG("[LED]device_create_file duty fail!\n");
}
bl_setting = &g_leds_data[i]->cust;
}
/******pangjw add end**************/
#else
if(strcmp(g_leds_data[i]->cdev.name,"lcd-backlight") == 0)
{
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_duty);
if(rc)
{
LEDS_DRV_DEBUG("[LED]device_create_file duty fail!\n");
}
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_div);
if(rc)
{
LEDS_DRV_DEBUG("[LED]device_create_file duty fail!\n");
}
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_frequency);
if(rc)
{
LEDS_DRV_DEBUG("[LED]device_create_file duty fail!\n");
}
rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_pwm_register);
if(rc)
{
LEDS_DRV_DEBUG("[LED]device_create_file duty fail!\n");
}
bl_setting = &g_leds_data[i]->cust;
}
#endif
}
//注意这个定义#if defined (CONFIG_FISE_PROJECT_U7210)需在以下路径下配置
Q:\kaios_72_normal\kernel-3.4\arch\arm\configs\fise6572_kais_k_debug_defconfig
CONFIG_FISE_PROJECT_U7210=y
Q:\kaios_72_normal\kernel-3.4\arch\arm\configs\fise6572_kais_k_defconfig
CONFIG_FISE_PROJECT_U7210=y
Q:\kaios_72_normal\kernel-3.4
ifeq ($(FISE_PROJECT_U7210),yes)
KBUILD_CPPFLAGS += -DFISE_PROJECT_U7210
endif
Q:\kaios_72_normal\kernel-3.4\drivers\misc\mediatek\Kconfig
config FISE_PROJECT_U7210
bool "FISE_PROJECT_U7210"
default n