Exemple #1
0
void iomux_debug_show(int check)
{
	int i = 0;
	int iflg = 0;
	unsigned int uregv = 0;
	struct iocfg_lp *iocfg_lookups = NULL;

	get_active_io_cfglp();
	iocfg_lookups = p_active_io_cfglp;
	for (i = 0; i < IO_LIST_LENGTH; i++) {

		iflg = 0;

		printk("GPIO_%02d_%d (%03d) ",\
			iocfg_lookups[i].ugpiog, iocfg_lookups[i].ugpio_bit,\
				((iocfg_lookups[i].ugpiog<<3)+iocfg_lookups[i].ugpio_bit));

		uregv = readl(IOC_BASE_ADDR + (iocfg_lookups[i].uiomg_off));
		printk("IOMG=0x%02X ", uregv);

		if (check == 1) {
			if ((uregv == iocfg_lookups[i].iomg_val)\
				|| (-1 == iocfg_lookups[i].iomg_val))
				printk("(0x%02X) ", (unsigned char)uregv);
			else {
				iflg = 1;
				printk("(0x%02X) ", (unsigned char)iocfg_lookups[i].iomg_val);
			}
		}

		uregv = readl(IOC_BASE_ADDR + 0x800 + (iocfg_lookups[i].uiocg_off));
		printk("IOCG=0x%02X ", uregv);

		if (check == 1) {
			if (((uregv & 0x3) == iocfg_lookups[i].iocg_val)\
				|| (-1 == iocfg_lookups[i].iocg_val))
				printk("(0x%02X) ", (unsigned char)uregv);
			else {
				iflg = 1;
				printk("(0x%02X) ", (unsigned char)iocfg_lookups[i].iocg_val);
			}
		}

		uregv = readl(GPIO_DIR(iocfg_lookups[i].ugpiog));
		printk("DIR=0x%02X ", GPIO_IS_SET(iocfg_lookups[i].ugpio_bit));

		if (check == 1) {
			if ((uregv & GPIO_BIT(1, iocfg_lookups[i].ugpio_bit))\
				== (GPIO_BIT(iocfg_lookups[i].gpio_dir, iocfg_lookups[i].ugpio_bit)))
				printk("(0x%02X) ", GPIO_IS_SET(iocfg_lookups[i].ugpio_bit));
			else {
				iflg = 1;
				printk("(0x%02X) ", (unsigned char)iocfg_lookups[i].gpio_dir);
			}
		}

		uregv = readl(GPIO_DATA(iocfg_lookups[i].ugpiog));
		printk("VAL=0x%02X ", GPIO_IS_SET(iocfg_lookups[i].ugpio_bit));

		if (check == 1) {
			if (((uregv & GPIO_BIT(1, iocfg_lookups[i].ugpio_bit))\
				== GPIO_BIT(iocfg_lookups[i].gpio_val, iocfg_lookups[i].ugpio_bit))\
					|| (uregv & GPIO_BIT(iocfg_lookups[i].iocg_val, iocfg_lookups[i].ugpio_bit)))
				printk("(0x%02X) ", GPIO_IS_SET(iocfg_lookups[i].ugpio_bit));
			else {
				iflg = 1;
				printk("(0x%02X) ", (unsigned char)iocfg_lookups[i].gpio_val);
			}
		}

		if (iflg == 1)
			printk("e");

		printk("\n");
	}
}
/* check all io status */
void io_debug_show(void)
{
	int i;
	unsigned int uregv, value, data;
	void __iomem *addr, *addr1;

	printk("IO_LIST_LENGTH is %d\n", IO_LIST_LENGTH);
	for (i = 0; i < IO_LIST_LENGTH; i++) {
		uregv = ((hisi_iocfg_lookups[i].ugpiog << 3) + hisi_iocfg_lookups[i].ugpio_bit);

		printk("gpio - %d\t", uregv);

		/* show iomg register's value */
		if (hisi_iocfg_lookups[i].uiomg_off != -1) {
			if (uregv <= 164)
				addr = sysreg_base.ioc_base[0] + hisi_iocfg_lookups[i].uiomg_off;
			else
				addr = sysreg_base.ioc_base[1] + hisi_iocfg_lookups[i].uiomg_off;

			value = readl(addr);
			printk("iomg = Func-%d", value);

			if (value != hisi_iocfg_lookups[i].iomg_val) {
				printk(" -E [Func-%d]", hisi_iocfg_lookups[i].iomg_val);
			} else {
				printk("             ");
			}
			printk("\t");
		} else {
			printk("iomg = Null               \t");
		}

		/* show iocg register */
		if (uregv <= 164)
			addr = sysreg_base.ioc_base[2] + hisi_iocfg_lookups[i].uiocg_off;
		else
			addr = sysreg_base.ioc_base[3] + hisi_iocfg_lookups[i].uiocg_off;

		value = readl(addr) & 0x03;
		printk("iocg = %s", pulltype[value]);

		if (value != hisi_iocfg_lookups[i].iocg_val) {
			printk(" -E [%s]", pulltype[hisi_iocfg_lookups[i].iocg_val]);
		} else {
			printk("        ");
		}
		printk("\t");

		/* gpio controller register */
		if (!hisi_iocfg_lookups[i].iomg_val) {
			addr = GPIO_DIR(sysreg_base.gpio_base[hisi_iocfg_lookups[i].ugpiog]);
			addr1 = GPIO_DATA(sysreg_base.gpio_base[hisi_iocfg_lookups[i].ugpiog], hisi_iocfg_lookups[i].ugpio_bit);

			value = GPIO_IS_SET(readl(addr), hisi_iocfg_lookups[i].ugpio_bit);
			data = GPIO_IS_SET(readl(addr1), hisi_iocfg_lookups[i].ugpio_bit);
			printk("gpio - %s", value ? "O" : "I ");

			if (value)
				printk("%s", data ? "H" : "L");

			if (value != hisi_iocfg_lookups[i].gpio_dir) {
				printk("     -E [%s", hisi_iocfg_lookups[i].gpio_dir ? "O" : "I");
				if (hisi_iocfg_lookups[i].gpio_dir && (data != hisi_iocfg_lookups[i].gpio_val))
					printk("%s", hisi_iocfg_lookups[i].gpio_val ? "H" : "L");
				printk("]");
			}

			printk("\n");
		}
	}
}