Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
0
/**
 * 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;     
}
Exemplo n.º 5
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;
    }
}