コード例 #1
0
static ssize_t keyshort_test(struct device *dev, struct device_attribute *attr, char *buf)
{
	int count;
	int mask=0;
        u32 col=0,cval=0,rval=0;
        if(!gpio_get_value(S5PC11X_GPH2(6)))//Power Key
        {
         mask |= 0x1;
        }
        if(!gpio_get_value(S5PC11X_GPH3(3)))//Volume Up
        {
         mask |= 0x10;
        }

        if(HWREV >= 0x2) //yhkim change to 0x2 for Verizon ATLAS. 
        {
            if(!gpio_get_value(S5PC11X_GPH3(1)) )  //volume down
           {
               mask |= 0x100;
           } 

        }        
        else 
        {
     //for Volume Down
            col = 1;
            cval = KEYCOL_DMASK & ~((1 << col) | (1 << (col + 8))); // clear that column number and 
    
            writel(cval, key_base+S3C_KEYIFCOL);             // make that Normal output.
               // others shuld be High-Z output.
            udelay(KEYPAD_DELAY);
	
            rval = ~(readl(key_base+S3C_KEYIFROW)) & ((1<<KEYPAD_ROWS)-1) ;
            writel(KEYIFCOL_CLEAR, key_base+S3C_KEYIFCOL);
//
           if((rval&0x02))
           {
             mask |=0x100;
           }
        }


    if(/*!gpio_get_value(GPIO_KBR0) || !gpio_get_value(GPIO_KBR1) || !gpio_get_value(GPIO_KBR2) || */ mask)
	{
		count = sprintf(buf,"PRESS\n");
              printk("keyshort_test: PRESS %d\n",mask);
	}
	else
	{
		count = sprintf(buf,"RELEASE\n");
              printk("keyshort_test: RELEASE\n");
	}	

	return count;
}
コード例 #2
0
ファイル: gpiolib.c プロジェクト: HeroOver/Epic-Love
			.ngpio	= S5PC11X_GPIO_H0_NR,
			.label	= "GPH0",
		},
	}, {
		.base	= S5PC11X_GPH1_BASE,
		.config	= &gpio_cfg_noint,
		.chip	= {
			.base	= S5PC11X_GPH1(0),
			.ngpio	= S5PC11X_GPIO_H1_NR,
			.label	= "GPH1",
		},
	}, {
		.base	= S5PC11X_GPH2_BASE,
		.config	= &gpio_cfg_noint,
		.chip	= {
			.base	= S5PC11X_GPH2(0),
			.ngpio	= S5PC11X_GPIO_H2_NR,
			.label	= "GPH2",
		},
	}, {
		.base	= S5PC11X_GPH3_BASE,
		.config	= &gpio_cfg_noint,
		.chip	= {
			.base	= S5PC11X_GPH3(0),
			.ngpio	= S5PC11X_GPIO_H3_NR,
			.label	= "GPH3",
		},
	}, {
		.base	= S5PC11X_GPI_BASE,
		.config	= &gpio_cfg,
		.chip	= {
コード例 #3
0
static int s3c_keygpio_isr_setup(void *pdev)
{
	int ret;

//	if(HWREV >= 0xB) //yhkim block it for Verizon ATLAS. 
	{
		if(HWREV >= 0x2) //yhkim change to 0x2 for Verizon ATLAS. 
		{
			//volume down
			s3c_gpio_setpull(S5PC11X_GPH3(1), S3C_GPIO_PULL_UP);
			set_irq_type(IRQ_EINT(25), IRQ_TYPE_EDGE_BOTH);
			ret = request_irq(IRQ_EINT(25), s3c_keygpio_vol_down_isr, IRQF_DISABLED ,
			    "key vol down", (void *) pdev);
			if (ret) {
				printk("request_irq failed (IRQ_KEYPAD (key vol down)) !!!\n");
				ret = -EIO;
				return ret;
			}

            
			//volume up
				printk("\n\n[Keypad] Setup VolUp Key interrupt(%d)!!\n",HWREV);
			s3c_gpio_setpull(S5PC11X_GPH3(3), S3C_GPIO_PULL_UP);
			set_irq_type(IRQ_EINT(27), IRQ_TYPE_EDGE_BOTH);
			ret = request_irq(IRQ_EINT(27), s3c_keygpio_vol_up_isr, IRQF_DISABLED ,
					"key vol up", (void *) pdev);
			if (ret) {
					printk("request_irq failed (IRQ_KEYPAD (key vol up)) !!!\n");
					ret = -EIO;
			  return ret;
			}

		}
		else
		{
			//volume up
			s3c_gpio_setpull(S5PC11X_GPH3(3), S3C_GPIO_PULL_UP);
			set_irq_type(IRQ_EINT(27), IRQ_TYPE_EDGE_BOTH);
		        ret = request_irq(IRQ_EINT(27), s3c_keygpio_vol_up_isr, IRQF_SAMPLE_RANDOM,
		                "key vol up", (void *) pdev);
		        if (ret) {
		                printk("request_irq failed (IRQ_KEYPAD (key vol up)) !!!\n");
		                ret = -EIO;
				  return ret;
		        }
		}


		//ok key
		#if 0  //yhkim :: Verizon Atlas did not have OK key. 

		//ok key
		s3c_gpio_setpull(S5PC11X_GPH3(5), S3C_GPIO_PULL_UP);
		set_irq_type(IRQ_EINT(29), IRQ_TYPE_EDGE_BOTH);
	        ret = request_irq(IRQ_EINT(29), s3c_keygpio_ok_isr, IRQF_SAMPLE_RANDOM,
	                "key ok", (void *) pdev);
	        if (ret) {
	                printk("request_irq failed (IRQ_KEYPAD (key ok)) !!!\n");
	                ret = -EIO;
			  return ret;
	        }

		#endif 	
		//ok key
		#if 0
		s3c_gpio_setpull(S5PC11X_GPH3(0), S3C_GPIO_PULL_UP);
		set_irq_type(IRQ_EINT(24), IRQ_TYPE_EDGE_BOTH);
	        ret = request_irq(IRQ_EINT(24), s3c_keygpio_ok_isr, IRQF_SAMPLE_RANDOM,
	                "key ok", (void *) pdev);
	        if (ret) {
	                printk("request_irq failed (IRQ_KEYPAD (key ok)) !!!\n");
	                ret = -EIO;
			  return ret;
	        }
		 #endif
	}

	//PWR key
	s3c_gpio_setpull(S5PC11X_GPH2(6), S3C_GPIO_PULL_UP);

	set_irq_type(IRQ_EINT(22), IRQ_TYPE_EDGE_BOTH);
  
        ret = request_irq(IRQ_EINT(22), s3c_keygpio_isr, IRQF_DISABLED ,
                "key gpio", (void *) pdev);
        if (ret) {
                printk("request_irq failed (IRQ_KEYPAD (gpio)) !!!\n");
                ret = -EIO;
        }

	return ret;

}
コード例 #4
0
ファイル: irq-eint.c プロジェクト: Byst/StupidFast
static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
{
	int offs = eint_offset(irq);
	int shift;
	u32 ctrl, mask;
	u32 newvalue = 0;

	switch (type) {
	case IRQ_TYPE_NONE:
		printk(KERN_WARNING "No edge setting!\n");
		break;

	case IRQ_TYPE_EDGE_RISING:
		newvalue = S5P_EXTINT_RISEEDGE;
		break;

	case IRQ_TYPE_EDGE_FALLING:
		newvalue = S5P_EXTINT_FALLEDGE;
		break;

	case IRQ_TYPE_EDGE_BOTH:
		newvalue = S5P_EXTINT_BOTHEDGE;
		break;

	case IRQ_TYPE_LEVEL_LOW:
		newvalue = S5P_EXTINT_LOWLEV;
		break;

	case IRQ_TYPE_LEVEL_HIGH:
		newvalue = S5P_EXTINT_HILEV;
		break;

	default:
		printk(KERN_ERR "No such irq type %d", type);
		return -1;
	}

	shift = (offs & 0x7) * 4;
	mask = 0x7 << shift;

	ctrl = __raw_readl(S5PC11X_EINTCON(eint_conf_reg(irq)));
	ctrl &= ~mask;
	ctrl |= newvalue << shift;
	__raw_writel(ctrl, S5PC11X_EINTCON(eint_conf_reg(irq)));
#ifdef  S5PC11X_ALIVEGPIO_STORE
	ctrl = __raw_readl(S5PC11X_EINTCON(eint_conf_reg(irq)));
#endif

	if((0 <= offs) && (offs < 8))
		s3c_gpio_cfgpin(S5PC11X_GPH0(offs&0x7), 0xf<<((offs&0x7)*4));
	else if((8 <= offs) && (offs < 16))
		s3c_gpio_cfgpin(S5PC11X_GPH1(offs&0x7), 0xf<<((offs&0x7)*4));
	else if((16 <= offs) && (offs < 24))
		s3c_gpio_cfgpin(S5PC11X_GPH2(offs&0x7), 0xf<<((offs&0x7)*4));
	else if((24 <= offs) && (offs < 32))
		s3c_gpio_cfgpin(S5PC11X_GPH3(offs&0x7), 0xf<<((offs&0x7)*4));
	else
		printk(KERN_ERR "No such irq number %d", offs);

	return 0;
}