void s3c_setup_keypad_cfg_gpio(int rows, int columns) { unsigned int gpio; unsigned int end; end = S5PC11X_GPH3(rows); /* Set all the necessary GPH2 pins to special-function 0 */ for (gpio = S5PC11X_GPH3(0); gpio < end; gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); //s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); } end = S5PC11X_GPJ4(4); for (gpio = S5PC11X_GPJ2(7); gpio <= end; gpio++) { //s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_DOWN); s3c_gpio_cfgpin(gpio, S3C_GPIO_OUTPUT); //s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); //s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s3c_gpio_setpin(gpio, 0); } }
static int keypad_scan(void) { u32 col,rval,gpio; DPRINTK("H3C %x J2C %x, J3c %x J4c%x \n",readl(S5PC11X_GPH3CON),readl(S5PC11X_GPJ2CON), readl(S5PC11X_GPJ3CON), readl(S5PC11X_GPJ4CON)); DPRINTK("keypad_scan() is called\n"); DPRINTK("row val = %x",readl(key_base + S3C_KEYIFROW)); for (gpio = S5PC11X_GPJ2(7); gpio <= S5PC11X_GPJ4(4); gpio++) s3c_gpio_setpin(gpio, 1); for (col=0,gpio = S5PC11X_GPJ2(7); col < KEYPAD_COLUMNS; col++,gpio++) { if(s3c_gpio_setpin(gpio, 0) < 0) s3c_gpio_setpin(++gpio, 0); //udelay(KEYPAD_DELAY); udelay(100); //rval = ~(readl(key_base+S3C_KEYIFROW)) & ((1<<KEYPAD_ROWS)-1) ; rval = ~(readl(S5PC11X_GPH3DAT)) & ((1<<KEYPAD_ROWS)-1) ; keymask[col] = rval; s3c_gpio_setpin(gpio,1); } for (gpio = S5PC11X_GPJ2(7); gpio <= S5PC11X_GPJ4(4); gpio++) s3c_gpio_setpin(gpio, 0); return 0; }
.ngpio = S5PC11X_GPIO_J2_NR, .label = "GPJ2", }, }, { .base = S5PC11X_GPJ3_BASE, .config = &gpio_cfg, .chip = { .base = S5PC11X_GPJ3(0), .ngpio = S5PC11X_GPIO_J3_NR, .label = "GPJ3", }, }, { .base = S5PC11X_GPJ4_BASE, .config = &gpio_cfg, .chip = { .base = S5PC11X_GPJ4(0), .ngpio = S5PC11X_GPIO_J4_NR, .label = "GPJ4", }, }, { .base = S5PC11X_MP01_BASE, .config = &gpio_cfg_noint, .chip = { .base = S5PC11X_MP01(0), .ngpio = S5PC11X_GPIO_MP01_NR, .label = "MP01", }, }, { .base = S5PC11X_MP02_BASE, .config = &gpio_cfg_noint,
/* * ftn for video */ static int s5p_tv_v_open(struct file *file) { int ret = 0,err; unsigned int status; ref_count_tv ++ ; mutex_lock(mutex_for_fo); if (s5ptv_status.tvout_output_enable) { mutex_unlock(mutex_for_fo); goto re_open; BASEPRINTK("tvout drv. already used !!\n"); ret = -EBUSY; goto drv_used; } #ifdef CONFIG_CPU_S5PC110 s5p_tv_clk_gate( true ); #endif #ifdef CONFIG_CPU_S5PC110 #if defined(CONFIG_S5PC110_KEPLER_BOARD)//Kepler err = gpio_request(S5PC11X_GPJ4(4),"TV_EN"); udelay(50); gpio_direction_output(S5PC11X_GPJ4(4),1); gpio_set_value(S5PC11X_GPJ4(4),1); udelay(50); err = gpio_request(S5PC11X_GPJ2(6),"EAR_SEL"); udelay(50); gpio_direction_output(S5PC11X_GPJ2(6),0); gpio_set_value(S5PC11X_GPJ2(6),0); udelay(50); #elif (defined CONFIG_S5PC110_T959_BOARD)//T959 status=get_headset_status(); printk("s5p_tv_v_open: get_headset_status:%d\n",status); if((SEC_HEADSET_3_POLE_DEVICE==status)||(SEC_TVOUT_DEVICE==status)) { printk("EAR_SEL:Low\n"); err = gpio_request(S5PC11X_GPJ2(6),"EAR_SEL"); //GPIO_EARPATH_SEL udelay(50); gpio_direction_output(S5PC11X_GPJ2(6),0); gpio_set_value(S5PC11X_GPJ2(6),0); udelay(50); } else if(SEC_HEADSET_4_POLE_DEVICE==status) { printk("EAR_SEL:High\n"); err = gpio_request(S5PC11X_GPJ2(6),"EAR_SEL"); //GPIO_EARPATH_SEL udelay(50); gpio_direction_output(S5PC11X_GPJ2(6),0); gpio_set_value(S5PC11X_GPJ2(6),1); udelay(50); } #endif #endif _s5p_tv_if_init_param(); s5p_tv_v4l2_init_param(); mutex_unlock(mutex_for_fo); #if 0 mutex_lock(mutex_for_i2c); /* for ddc(hdcp port) */ if(s5ptv_status.hpd_status) { if (i2c_add_driver(&hdcp_i2c_driver)) BASEPRINTK("HDCP port add failed\n"); hdcp_i2c_drv_state = true; } else hdcp_i2c_drv_state = false; mutex_unlock(mutex_for_i2c); #endif printk("\n\nTV open success\n\n"); re_open: /* for i2c probing */ udelay(100); return 0; drv_used: mutex_unlock(mutex_for_fo); return ret; }