Example #1
0
static int axp_gpio_direction_output(struct udevice *dev, unsigned pin,
				     int val)
{
	__maybe_unused int ret;
	u8 reg;

	switch (pin) {
#ifdef CONFIG_AXP221_POWER /* Only available on axp221/axp223 */
	case SUNXI_GPIO_AXP0_VBUS_ENABLE:
		ret = pmic_bus_clrbits(AXP221_MISC_CTRL,
				       AXP221_MISC_CTRL_N_VBUSEN_FUNC);
		if (ret)
			return ret;

		return axp_gpio_set_value(dev, pin, val);
#endif
	default:
		reg = axp_get_gpio_ctrl_reg(pin);
		if (reg == 0)
			return -EINVAL;

		return pmic_bus_write(reg, val ? AXP_GPIO_CTRL_OUTPUT_HIGH :
						 AXP_GPIO_CTRL_OUTPUT_LOW);
	}
}
Example #2
0
int gpio_set_value(unsigned gpio, int value)
{
#ifdef AXP_GPIO
	if (gpio >= SUNXI_GPIO_AXP0_START)
		return axp_gpio_set_value(gpio - SUNXI_GPIO_AXP0_START, value);
#endif
	return sunxi_gpio_output(gpio, value);
}
Example #3
0
static void LCD_bl_close(__u32 sel)
{
    //LCD_BL_EN(sel, 0);//config lcd_bl_en pin to close lcd backlight
    axp_gpio_set_io(1, 1);
    axp_gpio_set_value(1, 0);
    
    LCD_PWM_EN(sel, 0);//close pwm module
}
Example #4
0
static void LCD_bl_open(__u32 sel)
{
    LCD_PWM_EN(sel, 1);//open pwm module
    
    //LCD_BL_EN(sel, 1);//config lcd_bl_en pin to open lcd backlight
    axp_gpio_set_io(1, 1);
    axp_gpio_set_value(1, 1);
}
Example #5
0
static void lcd_power_ctrl(Bool_t status)
{
	mutex_lock(&lcd_power_mutex);
	printk(KERN_INFO "%s() Power %s\n", __FUNCTION__, (status ? "ON" : "OFF"));
    if (status) {
        //GPIOA27 -> LCD_PWR_EN#: 0  lcd 3.3v
		gpio_out(PAD_GPIOA_27, 1);        
        lcd_mdelay(20);
		
		gpio_out(PAD_GPIOD_8, 1);
		
        //GPIOC2 -> VCCx3_EN: 0
        gpio_out(PAD_GPIOC_2, 1);
#ifdef CONFIG_AW_AXP
		axp_gpio_set_io(3,1);     
		axp_gpio_set_value(3, 0); 
#endif			
		lcd_mdelay(20);			
		
        lcd_signals_ports_ctrl(ON);
		lcd_mdelay(10);	
		
		gpio_out(PAD_GPIOD_6, 1);
		lcd_mdelay(200);
		data_status = status;
    }
    else {
		data_status = status;
		lcd_mdelay(30);
		gpio_out(PAD_GPIOD_6, 0);
        lcd_signals_ports_ctrl(OFF);
		lcd_mdelay(20);
		
        //GPIOC2 -> VCCx3_EN: 1        
        gpio_out(PAD_GPIOC_2, 0);
#ifdef CONFIG_AW_AXP
		axp_gpio_set_io(3,0);
#endif
		lcd_mdelay(20);
		gpio_out(PAD_GPIOD_8, 0);
        //GPIOA27 -> LCD_PWR_EN#: 1  lcd 3.3v
        gpio_out(PAD_GPIOA_27, 0);
		lcd_mdelay(100);        //power down sequence, needed
    }
	printk(KERN_INFO "%s() Power %s finished\n", __FUNCTION__, (status ? "ON" : "OFF"));
	mutex_unlock(&lcd_power_mutex);
}
Example #6
0
static void power_off_lcd(void)
{
	//printk("\n\nLCD: power off lcd.\n");
	//VCCx3_EN
	WRITE_MPEG_REG(0x2013, READ_MPEG_REG(0x2013) & ~(1 << 2));    
    //WRITE_MPEG_REG(0x2012, READ_MPEG_REG(0x2012) & ~(1 << 2));
#ifdef CONFIG_AW_AXP
    axp_gpio_set_io(3,1);
    axp_gpio_set_value(3, 1); 
#endif
	msleep(50);
	
	//LCD_PWR_EN
	WRITE_MPEG_REG(0x200d, READ_MPEG_REG(0x200d) | (1 << 27));    
    //WRITE_MPEG_REG(0x200c, READ_MPEG_REG(0x200c) & ~(1 << 27));
    msleep(10);
}
Example #7
0
static void power_on_lcd(void)
{
	//LCD_PWR_EN: GPIOA_27
	WRITE_MPEG_REG(0x200d, READ_MPEG_REG(0x200d) & ~(1 << 27));    
    WRITE_MPEG_REG(0x200c, READ_MPEG_REG(0x200c) & ~(1 << 27));
    msleep(10);
	
#ifdef CONFIG_AW_AXP
    axp_gpio_set_io(3,1);
    axp_gpio_set_value(3, 0);
#else
	//VCCx3_EN: GPIOD_2
	WRITE_MPEG_REG(0x202c, READ_MPEG_REG(0x202c) & ~(1 << 22));
	WRITE_MPEG_REG(0x202d, READ_MPEG_REG(0x202d) & ~(1 << 19));
	WRITE_MPEG_REG(0x2013, READ_MPEG_REG(0x2013) | (1 << 18));    
    WRITE_MPEG_REG(0x2012, READ_MPEG_REG(0x2012) & ~(1 << 18));
#endif
	msleep(10);
}
static ssize_t set_value(struct device *dev, struct device_attribute *attr,
			  const char *buf, size_t count)
{
	struct virtual_gpio_data *data = dev_get_drvdata(dev);
	long val;
	int ret;

	if (strict_strtol(buf, 10, &val) != 0)
		return count;

	mutex_lock(&data->lock);

	data->value = val;
	ret = axp_gpio_set_value(data->gpio,data->value);

	mutex_unlock(&data->lock);

	if(ret){
		return ret;
	}

	return count;
}
Example #9
0
static void LCD_power_off(__u32 sel)
{
    //LCD_POWER_EN(sel, 0);//config lcd_power pin to close lcd power
    axp_gpio_set_io(0, 1);
    axp_gpio_set_value(0, 0);
}
Example #10
0
static void LCD_power_on(__u32 sel)
{
    //LCD_POWER_EN(sel, 1);//config lcd_power pin to open lcd power
    axp_gpio_set_io(0, 1);
    axp_gpio_set_value(0, 1);
}