static int sunxi_gpio_test(struct platform_device *pdev) { int ret; ret = gpio_request(GPIO_AXP(0), "axp_gpio"); if (IS_ERR_VALUE(ret)) { pr_warn("request axp gpio failed, errno %d\n", ret); return -EINVAL; } ret = gpio_direction_input(GPIO_AXP(0)); if (IS_ERR_VALUE(ret)) { pr_warn("set axp gpio direction input failed, errno %d\n", ret); return -EINVAL; } ret = gpio_request(GPIOA(0), "sunxi_gpio"); if (IS_ERR_VALUE(ret)) { pr_warn("request sunxi gpio failed, errno %d\n", ret); return -EINVAL; } ret = gpio_direction_input(GPIOA(0)); if (IS_ERR_VALUE(ret)) { pr_warn("set sunxi gpio direction input failed, errno %d\n", ret); return -EINVAL; } return 0; }
static int sunxi_gpio_eint_test(struct platform_device *pdev) { struct device *dev = &pdev->dev; int virq; int ret; /* map the virq of gpio */ virq = gpio_to_irq(GPIOA(0)); if (IS_ERR_VALUE(virq)) { pr_warn("map gpio [%d] to virq failed, errno = %d\n", GPIOA(0), virq); return -EINVAL; } pr_warn("gpio [%d] map to virq [%d] ok\n", GPIOA(0), virq); /* request virq, set virq type to high level trigger */ ret = devm_request_irq(dev, virq, sunxi_gpio_irq_test_handler, IRQF_TRIGGER_HIGH, "PA0_EINT", NULL); if (IS_ERR_VALUE(ret)) { pr_warn("request virq %d failed, errno = %d\n", virq, ret); return -EINVAL; } /* enbale virq */ //enable_irq(virq); return 0; }
static int ns115_jd_probe(struct platform_device *pdev) { int ret, irqret; unsigned long irqflags; struct ns115_jd_pridata *jack = &ns115_jd_data; DBG_PRINT("%s ....\n", __func__); ns115re_rt5631_jd_dev_data = (struct ns115ref_rt5631_jd_platform_data *)pdev->dev.platform_data; jack->irq = ns115re_rt5631_jd_dev_data->irq; jack->gpio = irq_to_gpio(ns115re_rt5631_jd_dev_data->irq); ret = gpio_request(GPIOA(2), "mic2_gpio"); if (ret) { printk(KERN_EMERG"request gpio A2 fail!\n"); } gpio_direction_input(GPIOA(2)); gpio_free(GPIOA(2)); INIT_WORK(&jack->work, ns115_jd_work_func); ret = gpio_request(jack->gpio, "RT5631_JD");//d15 - CODEC_PWR_EN if(ret < 0) { DBG_PRINT("RT5631_JD request failed \n"); return ret; } gpio_direction_input(jack->gpio); jack->report = gpio_get_value(jack->gpio); irqflags = jack->report?IRQF_TRIGGER_FALLING:IRQF_TRIGGER_RISING; DBG_PRINT("gpio = %d, irqflags=0x%x", jack->gpio, irqflags); /* switch-class based headset detection */ jack->sdev.name = "h2w"; ret = switch_dev_register(&jack->sdev); if (ret) { DBG_PRINT("error registering switch device %d\n", ret); return ret; } if(!jack->report){ jack->report = 1; queue_work(ns115_jd_wq, &jack->work); } irqret = request_irq(jack->irq, ns115_jd_irq_handler, irqflags, "ns115-jd", NULL); if (ret) { DBG_PRINT("JD request irq failed\n"); } return ret; }
/** * input_request_int - input request irq * Input: * type: * handle: * trig_gype: * para: * return value: 0 : success * -EIO : i/o err. * */ int input_request_int(enum input_sensor_type *input_type, irq_handler_t handle, unsigned long trig_type, void *para) { int ret = -1; int irq_number = 0; void *data = NULL; struct device *dev = NULL; switch (*input_type) { case CTP_TYPE: data = container_of(input_type, struct ctp_config_info, input_type); irq_number = gpio_to_irq(((struct ctp_config_info *)data)->int_number); if (IS_ERR_VALUE(irq_number)) { pr_warn("map gpio [%d] to virq failed, errno = %d\n", GPIOA(3), irq_number); return -EINVAL; } dev = ((struct ctp_config_info *)data)->dev; break; case GSENSOR_TYPE: break; case LS_TYPE: data = container_of(input_type, struct sensor_config_info, input_type); irq_number = gpio_to_irq(((struct sensor_config_info *)data)->int_number); if (IS_ERR_VALUE(irq_number)) { pr_warn("map gpio [%d] to virq failed, errno = %d\n", GPIOA(3), irq_number); return -EINVAL; } dev = ((struct sensor_config_info *)data)->dev; break; case IR_TYPE: break; default: break; } /* request virq, set virq type to high level trigger */ ret = devm_request_irq(dev, irq_number, handle, trig_type, "PA3_EINT", para); if (IS_ERR_VALUE(ret)) { pr_warn("request virq %d failed, errno = %d\n", irq_number, ret); return -EINVAL; } return 0; }
void sunxi_lcd_parse_sys_config(struct sunxi_panel *panel, __disp_lcd_cfg_t *lcd_cfg) { static char io_name[28][20] = {"lcdd0", "lcdd1", "lcdd2", "lcdd3", "lcdd4", "lcdd5", "lcdd6", "lcdd7", "lcdd8", "lcdd9", "lcdd10", "lcdd11", "lcdd12", "lcdd13", "lcdd14", "lcdd15", "lcdd16", "lcdd17", "lcdd18", "lcdd19", "lcdd20", "lcdd21", "lcdd22", "lcdd23", "lcdclk", "lcdde", "lcdhsync", "lcdvsync"}; disp_gpio_set_t *gpio_info; int value = 1; char primary_key[20], sub_name[25]; int i = 0; int ret; __u32 sel = panel->screen_id; sprintf(primary_key, "lcd%d_para", sel); //lcd_used ret = OSAL_Script_FetchParser_Data(primary_key, "lcd_used", &value, 1); if(ret == 0) { lcd_cfg->lcd_used = value; } if(lcd_cfg->lcd_used == 0) //no need to get lcd config if lcd_used eq 0 return ; //lcd_bl_en lcd_cfg->lcd_bl_en_used = 0; gpio_info = &(lcd_cfg->lcd_bl_en); ret = OSAL_Script_FetchParser_Data(primary_key,"lcd_bl_en", (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int)); if(ret == 0) { lcd_cfg->lcd_bl_en_used = 1; } //lcd_power lcd_cfg->lcd_power_used= 0; gpio_info = &(lcd_cfg->lcd_power); ret = OSAL_Script_FetchParser_Data(primary_key,"lcd_power", (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int)); if(ret == 0) { lcd_cfg->lcd_power_used= 1; } //lcd_pwm lcd_cfg->lcd_pwm_used= 0; gpio_info = &(lcd_cfg->lcd_pwm); ret = OSAL_Script_FetchParser_Data(primary_key,"lcd_pwm", (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int)); if(ret == 0) { #if 0 #ifdef __LINUX_OSAL__ lcd_cfg->lcd_pwm_used= 1; if(gpio_info->gpio == GPIOH(13))//ph13 { lcd_cfg->lcd_pwm_ch = 0; } else if((gpio_info->gpio == GPIOH(9)) && (gpio_info->gpio == GPIOH(10)))//ph9,ph10 { lcd_cfg->lcd_pwm_ch = 1; } else if((gpio_info->gpio == GPIOH(11)) && (gpio_info->gpio == GPIOH(12)))//ph11,ph12 { lcd_cfg->lcd_pwm_ch = 2; } else if((gpio_info->gpio == GPIOA(19)) && (gpio_info->gpio == GPIOA(20)))//ph19 pa20 { lcd_cfg->lcd_pwm_ch = 3; } else { lcd_cfg->lcd_pwm_used = 0; } __inf("lcd_pwm_used=%d,lcd_pwm_ch=%d\n", lcd_cfg->lcd_pwm_used, lcd_cfg->lcd_pwm_ch); #endif #endif } //lcd_gpio for(i=0; i<4; i++) { sprintf(sub_name, "lcd_gpio_%d", i); gpio_info = &(lcd_cfg->lcd_gpio[i]); ret = OSAL_Script_FetchParser_Data(primary_key,sub_name, (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int)); if(ret == 0) { lcd_cfg->lcd_gpio_used[i]= 1; } } //lcd_gpio_scl,lcd_gpio_sda gpio_info = &(lcd_cfg->lcd_gpio[4]); ret = OSAL_Script_FetchParser_Data(primary_key,"lcd_gpio_scl", (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int)); if(ret == 0) { lcd_cfg->lcd_gpio_used[4]= 1; } gpio_info = &(lcd_cfg->lcd_gpio[5]); ret = OSAL_Script_FetchParser_Data(primary_key,"lcd_gpio_sda", (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int)); if(ret == 0) { lcd_cfg->lcd_gpio_used[5]= 1; } //lcd io for(i=0; i<28; i++) { gpio_info = &(lcd_cfg->lcd_io[i]); ret = OSAL_Script_FetchParser_Data(primary_key,io_name[i], (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int)); if(ret == 0) { lcd_cfg->lcd_io_used[i]= 1; } } lcd_cfg->backlight_max_limit = 150; ret = OSAL_Script_FetchParser_Data(primary_key, "lcd_pwm_max_limit", &value, 1); if(ret == 0) { lcd_cfg->backlight_max_limit = (value > 255)? 255:value; } //init_bright sprintf(primary_key, "disp_init"); sprintf(sub_name, "lcd%d_backlight", sel); ret = OSAL_Script_FetchParser_Data(primary_key, sub_name, &value, 1); if(ret < 0) { lcd_cfg->backlight_bright = 197; } else { if(value > 256) { value = 256; } lcd_cfg->backlight_bright = value; } //bright,constraction,saturation,hue sprintf(primary_key, "disp_init"); sprintf(sub_name, "lcd%d_bright", sel); ret = OSAL_Script_FetchParser_Data(primary_key, sub_name, &value, 1); if(ret < 0) { lcd_cfg->lcd_bright = 50; } else { if(value > 100) { value = 100; } lcd_cfg->lcd_bright = value; } sprintf(sub_name, "lcd%d_contrast", sel); ret = OSAL_Script_FetchParser_Data(primary_key, sub_name, &value, 1); if(ret < 0) { lcd_cfg->lcd_contrast = 50; } else { if(value > 100) { value = 100; } lcd_cfg->lcd_contrast = value; } sprintf(sub_name, "lcd%d_saturation", sel); ret = OSAL_Script_FetchParser_Data(primary_key, sub_name, &value, 1); if(ret < 0) { lcd_cfg->lcd_saturation = 50; } else { if(value > 100) { value = 100; } lcd_cfg->lcd_saturation = value; } sprintf(sub_name, "lcd%d_hue", sel); ret = OSAL_Script_FetchParser_Data(primary_key, sub_name, &value, 1); if(ret < 0) { lcd_cfg->lcd_hue = 50; } else { if(value > 100) { value = 100; } lcd_cfg->lcd_hue = value; } }