static void sec_gpiocheck_work(struct work_struct *work)
{
    struct gpiomux_setting val;
    u32 i = PERIODIC_CHECK_GPIONUM;

    __msm_gpiomux_read(i, &val);

    printk(KERN_DEBUG "[gpio=%d] func=%d, drv=%d, full=%d, dir=%d dat=%d\n",
            i, val.func, val.drv, val.pull, val.dir, __msm_gpio_get_inout_lh(i) );

    schedule_delayed_work(&g_gpio_check_work, msecs_to_jiffies(PERIODIC_CHECK_GAP));
}
void msm_dump_gpio_table ( int flags  )
{
	int  i = 0; 
	struct msm_gpiomux_rec *rec = msm_gpiomux_recs;
	struct gpiomux_setting  tmp;

	(void) flags;
	
	printk("%s:\n", __func__);
	for (i = 0; i < msm_gpiomux_ngpio; i++, rec++) {
	
		printk("%03d: %d :", i, rec->ref ); 
		if (rec->sets[0]) {
			printk("#a: %2d,%2d,%2d,%2d:   ", 
				(int) rec->sets[0]->func,
				(int) rec->sets[0]->drv,
				(int) rec->sets[0]->pull,
				(int) rec->sets[0]->dir
				);
		} else {
			printk("#a: -1,-1,-1,-1:   "); 
		}
		if (rec->sets[1]) {
			printk("#s: %2d,%2d,%2d,%2d:   ",
				(int) rec->sets[1]->func,
				(int) rec->sets[1]->drv,
				(int) rec->sets[1]->pull,
				(int) rec->sets[1]->dir
				);
		} else {
			printk("#s: -1,-1,-1,-1:   "); 
		}

		__msm_gpiomux_read(i, &tmp );
		printk("#p: %2d,%2d,%2d,%2d:   ",
			(int) tmp.func,  (int) tmp.drv,
			(int) tmp.pull,  (int) tmp.dir );
			
		printk("\n");
	}
	printk("%s: end\n", __func__);
}