Example #1
0
void mt_gpio_set_power(void)
{
#if 0
    u32 val;

    val = GPIO_RD32(GPIO_BASE+0x510);
    
    if(((val & 0x100)>>8) == 1){
	GPIO_WR32(IO_CFG_L_BASE+0x48, 0x8000);
    }
    if(((val & 0x200)>>9) == 1){
	GPIO_WR32(IO_CFG_L_BASE+0x48, 0x10000);
    }
#endif
}
Example #2
0
void mt_gpio_set_dsel(u8 bpi_1v8)
{
    GPIO_REGS *pReg = (GPIO_REGS*)(GPIO_BASE);
	
	if (bpi_1v8 == GPIO_VIO18) {
		/*bpi_ctrl[9:4] = b`000000, [3:0] = b`0000*/
		GPIO_WR32(&pReg->bpi_ctrl[0].rst, 0x3FF);
	} else if (bpi_1v8 == GPIO_VIO28){
		/*bpi_ctrl[9:4] = b`001100, [3:0] = b`0101*/
		GPIO_WR32(&pReg->bpi_ctrl[0].set, 0xC5);
		GPIO_WR32(&pReg->bpi_ctrl[0].rst, 0x33A);
	}

	GPIOVER("BPI 0x%x\n",GPIO_RD32(&pReg->bpi_ctrl[0].val)); 		
}	
/*---------------------------------------------------------------------------*/
int mt_set_gpio_dir_base(unsigned long pin, unsigned long dir)
{
	unsigned long bit;

	if (pin >= MAX_GPIO_PIN)
		return -ERINVAL;

	if (dir >= GPIO_DIR_MAX)
		return -ERINVAL;
	/* GPIOERR("before  pin:%ld, dir:%ld\n",pin,dir); */
	/* pos = pin / MAX_GPIO_REG_BITS; */
	bit = DIR_offset[pin].offset;
#ifdef GPIO_BRINGUP
	reg = GPIO_RD32(DIR_addr[pin].addr);
	if (dir == GPIO_DIR_IN)
		reg &= (~(1 << bit));
	else
		reg |= (1 << bit);

	GPIO_WR32(DIR_addr[pin].addr, reg);
#else
	if (dir == GPIO_DIR_IN)
		GPIO_SET_BITS((1L << bit), DIR_addr[pin].addr + 8);
	else
		GPIO_SET_BITS((1L << bit), DIR_addr[pin].addr + 4);
#endif

	/* GPIOERR("%s:pin:%ld, dir:%ld, value:0x%x\n",__FUNCTION__, pin, dir, GPIO_RD32(DIR_addr[pin].addr)); */
	return RSUCCESS;
}
Example #4
0
void mt_gpio_set_avoid_leakage(void)
{
#if 0
#ifdef MTK_EMMC_SUPPORT
    GPIO_WR32(IO_CFG_B_BASE+0x58, 0x220000);
#endif
#endif
}
Example #5
0
void mt_gpio_set_default_chip(void)
{
    GPIO_REGS *pReg = (GPIO_REGS*)(GPIO_BASE);
    unsigned int idx;
    u32 val;
    
    for (idx = 0; idx < sizeof(pReg->dir)/sizeof(pReg->dir[0]); idx++){
		val = gpio_init_dir_data[idx];
        GPIO_WR32(&pReg->dir[idx],val);
    }
    
    for (idx = 0; idx < sizeof(pReg->pullen)/sizeof(pReg->pullen[0]); idx++){
		val = gpio_init_pullen_data[idx];
		GPIO_WR32(&pReg->pullen[idx],val);
    }
    
    for (idx = 0; idx < sizeof(pReg->pullsel)/sizeof(pReg->pullsel[0]); idx++){ 
		val = gpio_init_pullsel_data[idx];
		GPIO_WR32(&pReg->pullsel[idx],val);
    }
	/*for keypad special register*/
	mt_set_gpio_pull_select(GPIO74, GPIO74_PULL);
	mt_set_gpio_pull_select(GPIO75, GPIO75_PULL);
	mt_set_gpio_pull_select(GPIO92, GPIO92_PULL);
	mt_set_gpio_pull_select(GPIO93, GPIO93_PULL);
	mt_set_gpio_pull_select(GPIO167, GPIO167_PULL);
	mt_set_gpio_pull_select(GPIO168, GPIO168_PULL);
    
    for (idx = 0; idx < sizeof(pReg->dout)/sizeof(pReg->dout[0]); idx++) {
		val = gpio_init_dout_data[idx];
        GPIO_WR32(&pReg->dout[idx],val);
    }
    
    for (idx = 0; idx < sizeof(pReg->mode)/sizeof(pReg->mode[0]); idx++) {
		val = gpio_init_mode_data[idx];
		GPIO_WR32(&pReg->mode[idx],val);
    }

	for (idx = 0; idx < sizeof(pReg->smt)/sizeof(pReg->smt[0]); idx++) {
		val = gpio_init_smt_data[idx];
		GPIO_WR32(&pReg->smt[idx],val);
    }
	/*for msdc special smt */
	mt_set_gpio_smt(GPIO_SMT_GRP25, GPIO_SMT_GROUP_25); 
	mt_set_gpio_smt(GPIO_SMT_GRP26, GPIO_SMT_GROUP_26); 
	mt_set_gpio_smt(GPIO_SMT_GRP27, GPIO_SMT_GROUP_27); 
	mt_set_gpio_smt(GPIO_SMT_GRP28, GPIO_SMT_GROUP_28); 
	mt_set_gpio_smt(GPIO_SMT_GRP29, GPIO_SMT_GROUP_29); 
	mt_set_gpio_smt(GPIO_SMT_GRP30, GPIO_SMT_GROUP_30); 
	mt_set_gpio_smt(GPIO_SMT_GRP31, GPIO_SMT_GROUP_31); 
	mt_set_gpio_smt(GPIO_SMT_GRP32, GPIO_SMT_GROUP_32); 
	mt_set_gpio_smt(GPIO_SMT_GRP33, GPIO_SMT_GROUP_33); 

	//set BSI driving 2ma->4ma: 0x10005B30[7:4]=0x2
	GPIO_WR32(&pReg->drv_mode[3].set, 0x20);
    
    GPIOVER("mt_gpio_set_default() done\n");        
}
Example #6
0
void mt_gpio_set_driving(void)
{
#if 0
    u32 val;
    u32 mask;

    /* [MT6571] for MD BSI request */
    mask = 0x3000;
    val = GPIO_RD32(IO_CFG_T_BASE+0xF0);
    val &= ~(mask);
    val |= (0x0000 & mask);
    GPIO_WR32(IO_CFG_T_BASE+0xF0, val);
    /* [MT6571] end */

    /* [MT6571] for desense request (AUD IO) */
    mask = 0x30;
    val = GPIO_RD32(IO_CFG_L_BASE+0xA0);
    val &= ~(mask);
    val |= (0x00 & mask);
    GPIO_WR32(IO_CFG_L_BASE+0xA0, val);
    /* [MT6571] end */
#endif
}
Example #7
0
void mt_gpio_set_default_chip(void)
{
    u32 idx;
    u32 val;
    u32 mask;

    for (idx = 0; idx < sizeof(gpio_init_value)/((sizeof(UINT32))*(MASK_BIT+1)); idx++){
	mask = gpio_init_value[idx][MASK_BIT];
	val = GPIO_RD32(gpio_init_value[idx][ADDR_BIT]);
	val &= ~(mask);
	val |= ((gpio_init_value[idx][VAL_BIT])&mask);
        GPIO_WR32(gpio_init_value[idx][ADDR_BIT],val);
    }


    //GPIOVER("mt_gpio_set_default() done\n");        
}
Example #8
0
/*---------------------------------------------------------------------------*/
int mt_set_gpio_mode_base(unsigned long pin, unsigned long mode)
{
    unsigned long pos;
    unsigned long bit;
    unsigned long data;
    unsigned long mask = (1L << GPIO_MODE_BITS) - 1;
    GPIO_REGS *reg = gpio_reg;

    pos = pin / MAX_GPIO_MODE_PER_REG;
    bit = pin % MAX_GPIO_MODE_PER_REG;

    data = GPIO_RD32(&reg->mode[pos].val);

    data &= ~(mask << (GPIO_MODE_BITS*bit));
    data |= (mode << (GPIO_MODE_BITS*bit));

    GPIO_WR32(&reg->mode[pos].val, data);

    return RSUCCESS;
}
/*---------------------------------------------------------------------------*/
int mt_set_gpio_smt_base(unsigned long pin, unsigned long enable)
{
	/* unsigned long flags; */

	if (pin >= MAX_GPIO_PIN)
		return -ERINVAL;
#ifdef GPIO_BRINGUP

	if (SMT_offset[pin].offset == -1) {
		return GPIO_SMT_UNSUPPORTED;

	} else {
		bit = SMT_offset[pin].offset;
		reg = GPIO_RD32(SMT_addr[pin].addr);
		if (enable == GPIO_SMT_DISABLE)
			reg &= (~(1 << bit));
		else
			reg |= (1 << bit);
	}
	/* printk("SMT addr(%x),value(%x)\n",SMT_addr[pin].addr,GPIO_RD32(SMT_addr[pin].addr)); */
	GPIO_WR32(SMT_addr[pin].addr, reg);
#else

	if (SMT_offset[pin].offset == -1) {
		gpio_smt_unsupport[pin] = -1;
		return GPIO_SMT_UNSUPPORTED;
	}

	if (enable == GPIO_SMT_DISABLE)
		GPIO_SET_BITS((1L << (SMT_offset[pin].offset)), SMT_addr[pin].addr + 8);
	else
		GPIO_SET_BITS((1L << (SMT_offset[pin].offset)), SMT_addr[pin].addr + 4);

#endif

	/* GPIOERR("%s:pin:%ld, enable:%ld, value:0x%x\n",__FUNCTION__, pin, enable, GPIO_RD32(SMT_addr[pin].addr)); */

	return RSUCCESS;
}
/*---------------------------------------------------------------------------*/
int mt_set_gpio_pull_enable_base(unsigned long pin, unsigned long enable)
{
	if (pin >= MAX_GPIO_PIN)
		return -ERINVAL;



#ifdef GPIO_BRINGUP
	bit = PULLEN_offset[pin].offset;
	if (PULLEN_offset[pin].offset == -1)
		return GPIO_PULL_EN_UNSUPPORTED;
	reg = GPIO_RD32(PULLEN_addr[pin].addr);
	if (enable == GPIO_PULL_DISABLE)
		reg &= (~(1 << bit));
	else
		reg |= (1 << bit);

	GPIO_WR32(PULLEN_addr[pin].addr, reg);
#else

	if (PULLEN_offset[pin].offset == -1) {
		gpio_pullen_unsupport[pin] = -1;
		return GPIO_PULL_EN_UNSUPPORTED;
	}

	if (enable == GPIO_PULL_DISABLE)
		GPIO_SET_BITS((1L << (PULLEN_offset[pin].offset)),
				      PULLEN_addr[pin].addr + 8);
	else
		GPIO_SET_BITS((1L << (PULLEN_offset[pin].offset)),
				      PULLEN_addr[pin].addr + 4);

#endif

	return RSUCCESS;
}
Example #11
0
void mt_gpio_set_dsel(u8 nml2_1v8,u8 bsi_1v8,u8 bpi_1v8)
{
#if 0
	u32 mask;
	u32 val;
	u32 bit;
#define TDSEL_1V8 0x0
#define TDSEL_3V3 0x5
#define RDSEL_1V8 0x0
#define RDSEL_3V3 0xC
#define GPIO_NML2_OFFSET 0x730
#define GPIO_NML2_PWMR_OFFSET 0x740
#define GPIO_BSI_OFFSET 0x750
#define GPIO_BPI_OFFSET 0x740
	//set NML2 UART
	val = GPIO_RD32(GPIO_BASE + GPIO_NML2_OFFSET);
	mask = (1L << 4) - 1;
	bit = 8;
	val &= ~(mask << (bit));
	val |= (nml2_1v8?TDSEL_1V8:TDSEL_3V3)<<bit;
	GPIO_WR32(GPIO_BASE + GPIO_NML2_OFFSET, val);

	val = GPIO_RD32(GPIO_BASE + GPIO_NML2_OFFSET);
	mask = (1L << 6) - 1;
	bit = 16;
	val &= ~(mask << (bit));
	val |= (nml2_1v8?RDSEL_1V8:RDSEL_3V3)<<bit;
	GPIO_WR32(GPIO_BASE + GPIO_NML2_OFFSET, val);

	//set NML2 PWM
	val = GPIO_RD32(GPIO_BASE + GPIO_NML2_OFFSET);
	mask = (1L << 4) - 1;
	bit = 24;
	val &= ~(mask << (bit));
	val |= (nml2_1v8?TDSEL_1V8:TDSEL_3V3)<<bit;
	GPIO_WR32(GPIO_BASE + GPIO_NML2_OFFSET, val);

	val = GPIO_RD32(GPIO_BASE + GPIO_NML2_PWMR_OFFSET);
	mask = (1L << 6) - 1;
	bit = 0;
	val &= ~(mask << (bit));
	val |= (nml2_1v8?RDSEL_1V8:RDSEL_3V3)<<bit;
	GPIO_WR32(GPIO_BASE + GPIO_NML2_PWMR_OFFSET, val);

	//set BPI
	val = GPIO_RD32(GPIO_BASE + GPIO_BPI_OFFSET);
	mask = (1L << 4) - 1;
	bit = 8;
	val &= ~(mask << (bit));
	val |= (bpi_1v8?TDSEL_1V8:TDSEL_3V3)<<bit;
	GPIO_WR32(GPIO_BASE + GPIO_BPI_OFFSET, val);

	val = GPIO_RD32(GPIO_BASE + GPIO_BPI_OFFSET );
	mask = (1L << 6) - 1;
	bit = 16;
	val &= ~(mask << (bit));
	val |= (bpi_1v8?RDSEL_1V8:RDSEL_3V3)<<bit;
	GPIO_WR32(GPIO_BASE + GPIO_BPI_OFFSET, val);

	//set BSI
	val = GPIO_RD32(GPIO_BASE + GPIO_BSI_OFFSET);
	mask = (1L << 4) - 1;
	bit = 0;
	val &= ~(mask << (bit));
	val |= (bsi_1v8?TDSEL_1V8:TDSEL_3V3)<<bit;
	GPIO_WR32(GPIO_BASE + GPIO_BSI_OFFSET, val);

	val = GPIO_RD32(GPIO_BASE + GPIO_BSI_OFFSET );
	mask = (1L << 6) - 1;
	bit = 8;
	val &= ~(mask << (bit));
	val |= (bsi_1v8?RDSEL_1V8:RDSEL_3V3)<<bit;
	GPIO_WR32(GPIO_BASE + GPIO_BSI_OFFSET, val);
	GPIOVER("NML2 0x%x,BPI 0x%x, BSI 0x%x\n",GPIO_RD32(GPIO_BASE + GPIO_NML2_OFFSET),GPIO_RD32(GPIO_BASE + GPIO_BPI_OFFSET),GPIO_RD32(GPIO_BASE + GPIO_BSI_OFFSET));
#endif
}
/*---------------------------------------------------------------------------*/
int mt_set_gpio_pull_select_base(unsigned long pin, unsigned long select)
{
	/* unsigned long flags; */

	unsigned long bit = 0;
	/*u32 mask = (1L << 4) - 1;*/
	if (pin >= MAX_GPIO_PIN)
		return -ERINVAL;

	if (pin == 5) {
		pr_err("XXX MSDC SD CD PIN be touched!\n");
		dump_stack();
	}
#ifdef GPIO_BRINGUP


	if (PULL_offset[pin].offset == -1 && pupd_offset[pin].offset == -1)
		return GPIO_PULL_UNSUPPORTED;

	if (pin >= 160 && pin <= 165) {

		bit = pupd_offset[pin].offset;
		reg = GPIO_RD32(pupd_addr[pin].addr);
		if (select == GPIO_PULL_UP) {	/* 0x2 pull up */
			reg &= (~(mask << bit));
			reg |= (0x2 << bit);
		} else {	/* 0x6 pull down */

			reg &= (~(mask << bit));
			reg |= (0x6 << bit);
		}
		/* printk("fwq pullset pin=%d,3.............\n",pin); */
		GPIO_WR32(pupd_addr[pin].addr, reg);
		return RSUCCESS;

	}

	/* printk("fwq pullset pin=%d,select(%d)\n",pin,select); */
	if (PULL_offset[pin].offset != -1) {

		bit = PULL_offset[pin].offset;
		reg = GPIO_RD32(PULL_addr[pin].addr);
		if (select == GPIO_PULL_DOWN)
			reg &= (~(1 << bit));
		else
			reg |= (1 << bit);
		/* printk("fwq pullset pin=%d,2.............\n",pin); */
		GPIO_WR32(PULL_addr[pin].addr, reg);
	} else {
		bit = pupd_offset[pin].offset + 2;
		reg = GPIO_RD32(pupd_addr[pin].addr);
		if (select == GPIO_PULL_UP)
			reg &= (~(1 << bit));
		else
			reg |= (1 << bit);
		/* printk("fwq pullset pin=%d,3.............\n",pin); */
		GPIO_WR32(pupd_addr[pin].addr, reg);

	}

#else

	if ((PULL_offset[pin].offset == -1) && (pupd_offset[pin].offset == -1)) {
		gpio_pull_select_unsupport[pin] = -1;
		return GPIO_PULL_UNSUPPORTED;
	}


	/* printk("fwq pullset pin=%ld,1.............\n",pin); */
	if (pin >= 160 && pin <= 165) {

		if (select == GPIO_PULL_UP) {	/* 0x2 pull up */
			/* reg &= (~(mask << bit)); */
			/* reg |= (0x2 << bit); */
			GPIO_SET_BITS((2L << (pupd_offset[pin].offset)), pupd_addr[pin].addr + 4);
		} else {	/* 0x6 pull down */

			/* reg &= (~(mask << bit)); */
			/* reg |= (0x6 << bit); */
			GPIO_SET_BITS((6L << (pupd_offset[pin].offset)), pupd_addr[pin].addr + 4);
		}

		return RSUCCESS;

	}
	/* printk("fwq pullset pin=%ld,2.............\n",pin); */
	/* printk("fwq pullset pin=%d,select(%d)\n",pin,select); */
	if (PULL_offset[pin].offset != -1) {

		bit = PULL_offset[pin].offset;
		/* reg = GPIO_RD32(PULL_addr[pin].addr); */
		if (select == GPIO_PULL_DOWN)
			GPIO_SET_BITS((1L << bit), PULL_addr[pin].addr + 8);
		else
			GPIO_SET_BITS((1L << bit), PULL_addr[pin].addr + 4);
		/* printk("fwq pullset pin=%d,2.............\n",pin); */

	} else {

		bit = pupd_offset[pin].offset + 2;
		/* reg = GPIO_RD32(pupd_addr[pin].addr); */
		if (select == GPIO_PULL_UP)
			GPIO_SET_BITS((1L << (bit)), pupd_addr[pin].addr + 8);
		else
			GPIO_SET_BITS((1L << (bit)), pupd_addr[pin].addr + 4);

	}
#endif
/* GPIOERR("%s:pin:%ld, select:%ld, value:0x%x\n",__FUNCTION__, pin, select, GPIO_RD32(PULL_addr[pin].addr)); */

	return RSUCCESS;
}