void pnx4008_uart_init(void) { u32 tmp; int i = UART_FIFO_SIZE; __raw_writel(0xC1, UART5_BASE_VA + UART_FCR_OFFSET); __raw_writel(0xC1, UART3_BASE_VA + UART_FCR_OFFSET); /* Send a NULL to fix the UART HW bug */ __raw_writel(0x00, UART5_BASE_VA); __raw_writel(0x00, UART3_BASE_VA); while (i--) { tmp = __raw_readl(UART5_BASE_VA); tmp = __raw_readl(UART3_BASE_VA); } __raw_writel(0, UART5_BASE_VA + UART_FCR_OFFSET); __raw_writel(0, UART3_BASE_VA + UART_FCR_OFFSET); /* setup wakeup interrupt */ start_int_set_rising_edge(SE_U3_RX_INT); start_int_ack(SE_U3_RX_INT); start_int_umask(SE_U3_RX_INT); start_int_set_rising_edge(SE_U5_RX_INT); start_int_ack(SE_U5_RX_INT); start_int_umask(SE_U5_RX_INT); }
void pnx4008_uart_init(void) { u32 tmp; int i = UART_FIFO_SIZE; __raw_writel(0xC1, UART5_BASE_VA + UART_FCR_OFFSET); __raw_writel(0xC1, UART3_BASE_VA + UART_FCR_OFFSET); __raw_writel(0x00, UART5_BASE_VA); __raw_writel(0x00, UART3_BASE_VA); while (i--) { tmp = __raw_readl(UART5_BASE_VA); tmp = __raw_readl(UART3_BASE_VA); } __raw_writel(0, UART5_BASE_VA + UART_FCR_OFFSET); __raw_writel(0, UART3_BASE_VA + UART_FCR_OFFSET); start_int_set_rising_edge(SE_U3_RX_INT); start_int_ack(SE_U3_RX_INT); start_int_umask(SE_U3_RX_INT); start_int_set_rising_edge(SE_U5_RX_INT); start_int_ack(SE_U5_RX_INT); start_int_umask(SE_U5_RX_INT); }
/*initialize the device*/ static int pnx_keypad_probe(struct device *dev) { int tmp; printk(KERN_INFO PKMOD "PNX4008 Keypad Driver\n"); /* printk("%s %s\n", __TIME__, __DATE__); */ if (!request_region(PNX4008_KEYSCAN_BASE, 0x1000, MODULE_NAME)) { printk(KERN_ERR PKMOD "KS (keypad) registers are already in use\n"); pnx_keypad_remove(dev); return -EBUSY; } set_bit(KEYPAD_REGION_INITED, &pnx_keypad_status); #ifdef KS_USE_ROWS_6_7 tmp = pnx4008_gpio_register_pin(GPIO_02); if (tmp < 0) { printk(KERN_ERR PKMOD "failed to register GPIO2\n"); pnx_keypad_remove(dev); return tmp; } pnx4008_gpio_set_pin_mux(GPIO_02, 1); /*set to MUX function */ set_bit(KEYPAD_GPIO2_MUX_INITED, &pnx_keypad_status); tmp = pnx4008_gpio_register_pin(GPIO_03); if (tmp < 0) { printk(KERN_ERR PKMOD "failed to register GPIO3\n"); pnx_keypad_remove(dev); return tmp; } pnx4008_gpio_set_pin_mux(GPIO_03, 1); /*set to MUX function */ set_bit(KEYPAD_GPIO3_MUX_INITED, &pnx_keypad_status); #endif pnx_keypad_dev_init(&pnx_keypad_dev); /*initialize device fields */ input_register_device(&pnx_keypad_dev); pnx4008_kbd_clock_control(1); /*enable clock */ pnx_keypad_reg_init(); /*setup registers */ /*setup wakeup interrupt */ start_int_set_rising_edge(SE_KEY_IRQ); start_int_ack(SE_KEY_IRQ); start_int_umask(SE_KEY_IRQ); set_bit(KEYPAD_DEVICE_INITED, &pnx_keypad_status); /*interrupt may be triggered even if keypad clock is disabled */ tmp = request_irq(KEY_IRQ, pnx_keypad_interrupt, 0, MODULE_NAME, &pnx_keypad_dev); if (tmp < 0) { printk(KERN_ERR PKMOD "failed to register irq\n"); pnx_keypad_remove(dev); return tmp; } set_bit(KEYPAD_IRQ_INITED, &pnx_keypad_status); return 0; }
static void pnx4008_set_usb_bits(void) { start_int_set_falling_edge(SE_USB_OTG_ATX_INT_N); start_int_ack(SE_USB_OTG_ATX_INT_N); start_int_umask(SE_USB_OTG_ATX_INT_N); start_int_set_rising_edge(SE_USB_OTG_TIMER_INT); start_int_ack(SE_USB_OTG_TIMER_INT); start_int_umask(SE_USB_OTG_TIMER_INT); start_int_set_rising_edge(SE_USB_I2C_INT); start_int_ack(SE_USB_I2C_INT); start_int_umask(SE_USB_I2C_INT); start_int_set_rising_edge(SE_USB_INT); start_int_ack(SE_USB_INT); start_int_umask(SE_USB_INT); start_int_set_rising_edge(SE_USB_NEED_CLK_INT); start_int_ack(SE_USB_NEED_CLK_INT); start_int_umask(SE_USB_NEED_CLK_INT); start_int_set_rising_edge(SE_USB_AHB_NEED_CLK_INT); start_int_ack(SE_USB_AHB_NEED_CLK_INT); start_int_umask(SE_USB_AHB_NEED_CLK_INT); }