static void __axp_irq_work(struct work_struct *work) { u32 i; u8 addr[5]; u8 data[5]; printk("axp irq work running...\n"); //read out irq status and dump irq status printk("read axp irq status\n"); for (i = 0; i < 5; i++) { addr[i] = 0x48 + i; } ar100_axp_read_reg(addr, data, 5); printk("axp irq status information:\n"); for (i = 0; i < 5; i++) { printk("addr:0x%x, data:0x%x\n", addr[i], data[i]); } printk("clear axp status\n"); ar100_axp_write_reg(addr, data, 5); printk("re-enable axp irq of ar100\n"); ar100_enable_axp_irq(); printk("axp irq handle end\n"); }
//voltage(7~33): 0.1v, e.g. 1 voltage = 0.1v __s32 LCD_POWER_DLDO1_EN(__u32 sel, __bool b_en, __u32 voltage) { #if 0 __u8 data; __u32 ret; __u8 addr; voltage = (voltage < 7)? 7 :voltage; voltage = (voltage > 33)?33:voltage; data = voltage - 7; addr = 0x15; ret = ar100_axp_write_reg(&addr, &data, 1); if(ret != 0) { DE_WRN("set dldo1 to %d.%dv fail\n", voltage/10, voltage%10); } addr = 0x12; ret = ar100_axp_read_reg(&addr, &data, 1); if(ret != 0) { DE_WRN("axp read reg fail\n"); } addr = 0x12; data = (b_en)? (data | 0x08):(data & 0xf7); ar100_axp_write_reg(&addr, &data, 1); if(ret != 0) { DE_WRN("%s dldo1 fail\n", (b_en)? "enable":"disable"); } #endif return 0; }
__s32 LCD_POWER_EN(__u32 sel, __bool b_en) { #if 0 disp_gpio_set_t gpio_info[1]; __hdle hdl; if(b_en) { if(gdisp.screen[sel].lcd_cfg.lcd_power_used) { if(gpanel_info[sel].lcd_if == LCD_IF_EXT_DSI) { LCD_POWER_ELDO3_EN(sel, 1, 12); msleep(10); } memcpy(gpio_info, &(gdisp.screen[sel].lcd_cfg.lcd_power), sizeof(disp_gpio_set_t)); if(!b_en) { gpio_info->data = (gpio_info->data==0)?1:0; } hdl = OSAL_GPIO_Request(gpio_info, 1); OSAL_GPIO_Release(hdl, 2); udelay(200); if((gpanel_info[sel].lcd_if == LCD_IF_EDP) && (gpanel_info[sel].lcd_edp_tx_ic == 0)) { __u8 data; __u32 ret; __u8 addr; addr = 0x1b; data = 0x0b; ret = ar100_axp_write_reg(&addr, &data, 1); //set eldo3 to 1.8v if(ret != 0) { DE_WRN("set eldo3 to 1.8v fail\n"); } addr = 0x12; ret = ar100_axp_read_reg(&addr, &data, 1); if(ret != 0) { DE_WRN("axp read reg fail\n"); } addr = 0x12; data |= 0x04; ar100_axp_write_reg(&addr, &data, 1); //enable eldo3 if(ret != 0) { DE_WRN("enable eldo3 fail\n"); } } else if((gpanel_info[sel].lcd_if == LCD_IF_EDP) && (gpanel_info[sel].lcd_edp_tx_ic == 1)) { __u8 data; __u32 ret; __u8 addr; addr = 0x15; data = 0x12; ret = ar100_axp_write_reg(&addr, &data, 1); //set dldo1 to 2.5v if(ret != 0) { DE_WRN("set dldo1 to 2.5v fail\n"); } addr = 0x12; ret = ar100_axp_read_reg(&addr, &data, 1); if(ret != 0) { DE_WRN("axp read reg fail\n"); } addr = 0x12; data |= 0x08; ar100_axp_write_reg(&addr, &data, 1); //enable dldo1 if(ret != 0) { DE_WRN("enable dldo1 fail\n"); } addr = 0x1b; data = 0x05; ret = ar100_axp_write_reg(&addr, &data, 1); //set eldo3 to 1.2v if(ret != 0) { DE_WRN("set eldo3 to 1.2v fail\n"); } addr = 0x12; ret = ar100_axp_read_reg(&addr, &data, 1); if(ret != 0) { DE_WRN("axp read reg fail\n"); } addr = 0x12; data |= 0x04; ar100_axp_write_reg(&addr, &data, 1); //enable eldo3 if(ret != 0) { DE_WRN("enable eldo3 fail\n"); } } msleep(50); } Disp_lcdc_pin_cfg(sel, DISP_OUTPUT_TYPE_LCD, 1); msleep(2); } else { Disp_lcdc_pin_cfg(sel, DISP_OUTPUT_TYPE_LCD, 0); msleep(2); if(gdisp.screen[sel].lcd_cfg.lcd_power_used) { if((gpanel_info[sel].lcd_if == LCD_IF_EDP) && (gpanel_info[sel].lcd_edp_tx_ic == 0)) { __u8 data; __u32 ret; __u8 addr; addr = 0x12; ret = ar100_axp_read_reg(&addr, &data, 1); if(ret != 0) { DE_WRN("axp read reg fail\n"); } data &= 0xfb; ar100_axp_write_reg(&addr, &data, 1); //enable eldo3 if(ret != 0) { DE_WRN("disable eldo3 fail\n"); } } else if((gpanel_info[sel].lcd_if == LCD_IF_EDP) && (gpanel_info[sel].lcd_edp_tx_ic == 1)) { __u8 data; __u32 ret; __u8 addr; addr = 0x12; ret = ar100_axp_read_reg(&addr, &data, 1); if(ret != 0) { DE_WRN("axp read reg fail\n"); } data &= 0xfb; ar100_axp_write_reg(&addr, &data, 1); //disable eldo3 if(ret != 0) { DE_WRN("disable eldo3 fail\n"); } addr = 0x12; ret = ar100_axp_read_reg(&addr, &data, 1); if(ret != 0) { DE_WRN("axp read reg fail\n"); } data &= 0xf7; ar100_axp_write_reg(&addr, &data, 1); //disable dldo1 if(ret != 0) { DE_WRN("disable dldo1 fail\n"); } } udelay(200); memcpy(gpio_info, &(gdisp.screen[sel].lcd_cfg.lcd_power), sizeof(disp_gpio_set_t)); if(!b_en) { gpio_info->data = (gpio_info->data==0)?1:0; } hdl = OSAL_GPIO_Request(gpio_info, 1); OSAL_GPIO_Release(hdl, 2); if(gpanel_info[sel].lcd_if == LCD_IF_EXT_DSI) { LCD_POWER_ELDO3_EN(sel, 0, 7); } } } #endif return 0; }
static void __ar100_axp_test(void) { unsigned char addr_table[AXP_TRANS_BYTE_MAX]; unsigned char data_table[AXP_TRANS_BYTE_MAX]; unsigned int len; int ret; int i; u32 total_time; u32 begin_time; /* test write regs */ printk("test axp write regs begin...\n"); len = AXP_TRANS_BYTE_MAX; for (i = 0; i < AXP_TRANS_BYTE_MAX; i++) { addr_table[i] = 0xc0 + i; data_table[i] = 0x20; } for (len = 1; len <= AXP_TRANS_BYTE_MAX; len++) { printk("write axp regs data:\n"); for (i = 0; i < len; i++) { printk("addr%x : %x\n", (unsigned int)addr_table[i], (unsigned int)data_table[i]); } begin_time = __ar100_counter_read(); ret = ar100_axp_write_reg(addr_table, data_table, len); total_time = (__ar100_counter_read() - begin_time); if (ret) { printk("test axp write failed, len = %d, ret = %d\n", len, ret); } printk("write axp regs data [len = %d] succeeded\n", len); printk("write axp regs time: %dus\n", total_time); } printk("test axp write regs succeeded\n"); /* test read regs */ printk("test axp read regs begin...\n"); len = AXP_TRANS_BYTE_MAX; for (i = 0; i < AXP_TRANS_BYTE_MAX; i++) { addr_table[i] = 0xc0 + i; } for (len = 1; len <= AXP_TRANS_BYTE_MAX; len++) { begin_time = __ar100_counter_read(); ret = ar100_axp_read_reg(addr_table, data_table, len); total_time = (__ar100_counter_read() - begin_time); if (ret) { printk("test axp read failed, len = %d, ret = %d\n", len, ret); } printk("read axp regs data:\n"); for (i = 0; i < len; i++) { printk("addr%x : %x\n", (unsigned int)addr_table[i], (unsigned int)data_table[i]); } printk("read axp regs data [len = %d] succeeded\n", len); printk("read axp regs time: %dus\n", total_time); } printk("test axp read regs succeeded\n"); /* test axp interrupt call-back */ printk("test axp call-back begin...\n"); INIT_WORK(&axp_work, __axp_irq_work); if(ar100_axp_cb_register(__ar100_axp_cb, NULL)) { printk("test axp reg cb failed\n"); } printk("test axp call-back succeeded\n"); printk("axp test succeeded\n"); }