コード例 #1
0
ファイル: irq.c プロジェクト: Broadcom/stblinux-2.6.18
void __init
imx_init_irq(void)
{
	unsigned int irq;

	DEBUG_IRQ("Initializing imx interrupts\n");

	/* Mask all interrupts initially */
	IMR(0) = 0;
	IMR(1) = 0;
	IMR(2) = 0;
	IMR(3) = 0;

	for (irq = 0; irq < IMX_IRQS; irq++) {
		set_irq_chip(irq, &imx_internal_chip);
		set_irq_handler(irq, do_level_IRQ);
		set_irq_flags(irq, IRQF_VALID);
	}

	for (irq = IRQ_GPIOA(0); irq < IRQ_GPIOD(32); irq++) {
		set_irq_chip(irq, &imx_gpio_chip);
		set_irq_handler(irq, do_edge_IRQ);
		set_irq_flags(irq, IRQF_VALID);
	}

	set_irq_chained_handler(GPIO_INT_PORTA, imx_gpioa_demux_handler);
	set_irq_chained_handler(GPIO_INT_PORTB, imx_gpiob_demux_handler);
	set_irq_chained_handler(GPIO_INT_PORTC, imx_gpioc_demux_handler);
	set_irq_chained_handler(GPIO_INT_PORTD, imx_gpiod_demux_handler);

	/* Disable all interrupts initially. */
	/* In IMX this is done in the bootloader. */
}
コード例 #2
0
ファイル: irq.c プロジェクト: ForayJones/iods
static void
imx_gpiod_demux_handler(unsigned int irq_unused, struct irq_desc *desc)
{
	unsigned int mask, irq;

	mask = ISR(3);
	irq = IRQ_GPIOD(0);
	imx_gpio_handler(mask, irq, desc);
}
コード例 #3
0
static int mx21ads_sdhc_init(struct device *dev, irq_handler_t detect_irq,
	void *data)
{
	int ret;

	ret = request_irq(IRQ_GPIOD(25), detect_irq,
		IRQF_TRIGGER_FALLING, "mmc-detect", data);
	if (ret)
		goto out;
	return 0;
out:
	return ret;
}
コード例 #4
0
/* init and exit */
int cbob_uart_init(void)
{
  int error, i;
  
  cbob_uart_tty_driver = alloc_tty_driver(CBOB_UART_MINORS);
  if(!cbob_uart_tty_driver)
  	return -ENOMEM;
  
  cbob_uart_tty_driver->owner = THIS_MODULE;
  cbob_uart_tty_driver->driver_name = "cbob_uart";
  cbob_uart_tty_driver->name = "uart";
  cbob_uart_tty_driver->devfs_name = "cbc/uart%d";
  cbob_uart_tty_driver->major = CBOB_UART_MAJOR;
  cbob_uart_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
  cbob_uart_tty_driver->subtype = SERIAL_TYPE_NORMAL;
  cbob_uart_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
  cbob_uart_tty_driver->init_termios = tty_std_termios;
  cbob_uart_tty_driver->init_termios.c_iflag = IGNBRK | IGNPAR;
  cbob_uart_tty_driver->init_termios.c_oflag = 0;
  cbob_uart_tty_driver->init_termios.c_cflag = B115200 | CS8 | CREAD | CLOCAL;
  cbob_uart_tty_driver->init_termios.c_lflag = 0;
  cbob_uart_tty_driver->init_termios.c_cc[VMIN] = 1;
  cbob_uart_tty_driver->init_termios.c_cc[VTIME] = 0;
  tty_set_operations(cbob_uart_tty_driver, &cbob_uart_ops);
  
  error = tty_register_driver(cbob_uart_tty_driver);
  if(error) {
  	printk(KERN_ERR "failed to register cbob uart tty driver");
  	put_tty_driver(cbob_uart_tty_driver);
  	return error;
  }
  
  for(i = 0;i < CBOB_UART_MINORS; i++) {
  	tty_register_device(cbob_uart_tty_driver, i, NULL);
  	cbob_uarts[i] = NULL;
  }
 
 	cbob_uart_workqueue = create_singlethread_workqueue("CBOB UART");
 
 	imx_gpio_mode(GPIO_PORTD | 27 | GPIO_IN | GPIO_GPIO | GPIO_IRQ_RISING);
  request_irq(IRQ_GPIOD(27), cbob_uart_handler, 0, "CBOB", 0);
  
  return error;
}
コード例 #5
0
void __init
imx_init_irq(void)
{
	unsigned int irq;

	DEBUG_IRQ("Initializing imx interrupts\n");

	/* Disable all interrupts initially. */
	/* Do not rely on the bootloader. */
	__raw_writel(0, IMX_AITC_INTENABLEH);
	__raw_writel(0, IMX_AITC_INTENABLEL);

	/* Mask all GPIO interrupts as well */
	IMR(0) = 0;
	IMR(1) = 0;
	IMR(2) = 0;
	IMR(3) = 0;

	for (irq = 0; irq < IMX_IRQS; irq++) {
		set_irq_chip(irq, &imx_internal_chip);
		set_irq_handler(irq, handle_level_irq);
		set_irq_flags(irq, IRQF_VALID);
	}

	for (irq = IRQ_GPIOA(0); irq < IRQ_GPIOD(32); irq++) {
		set_irq_chip(irq, &imx_gpio_chip);
		set_irq_handler(irq, handle_edge_irq);
		set_irq_flags(irq, IRQF_VALID);
	}

	set_irq_chained_handler(GPIO_INT_PORTA, imx_gpioa_demux_handler);
	set_irq_chained_handler(GPIO_INT_PORTB, imx_gpiob_demux_handler);
	set_irq_chained_handler(GPIO_INT_PORTC, imx_gpioc_demux_handler);
	set_irq_chained_handler(GPIO_INT_PORTD, imx_gpiod_demux_handler);

	/* Release masking of interrupts according to priority */
	__raw_writel(-1, IMX_AITC_NIMASK);

#ifdef CONFIG_FIQ
	/* Initialize FIQ */
	init_FIQ();
#endif
}
コード例 #6
0
void cbob_uart_exit(void)
{
	struct cbob_uart *uart;
	int i;
	
	free_irq(IRQ_GPIOD(27), 0);
	
	for(i = 0;i < CBOB_UART_MINORS;i++)
		tty_unregister_device(cbob_uart_tty_driver, i);
	tty_unregister_driver(cbob_uart_tty_driver);
	
	for(i = 0;i < CBOB_UART_MINORS;i++) {
		uart = cbob_uarts[i];
		if(uart) {
			while(uart->open_count)
				do_close(uart);
			kfree(uart);
			cbob_uarts[i] = NULL;
		}
	}
	
	flush_workqueue(cbob_uart_workqueue);
	destroy_workqueue(cbob_uart_workqueue);
}
コード例 #7
0
static void mx21ads_sdhc_exit(struct device *dev, void *data)
{
	free_irq(IRQ_GPIOD(25), data);
}
コード例 #8
0
}

static struct ads7846_platform_data ads7846_config __initdata = {
	.get_pendown_state	= ads7846_get_pendown_state,
	.keep_vref_on		= 1,
};
#endif

#if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE)
static struct spi_board_info eukrea_mbimx27_spi_board_info[] __initdata = {
	[0] = {
		.modalias	= "ads7846",
		.bus_num	= 0,
		.chip_select	= 0,
		.max_speed_hz	= 1500000,
		.irq		= IRQ_GPIOD(25),
		.platform_data	= &ads7846_config,
		.mode           = SPI_MODE_2,
	},
};

static int eukrea_mbimx27_spi_cs[] = {GPIO_PORTD | 28};

static const struct spi_imx_master eukrea_mbimx27_spi0_data __initconst = {
	.chipselect	= eukrea_mbimx27_spi_cs,
	.num_chipselect = ARRAY_SIZE(eukrea_mbimx27_spi_cs),
};
#endif

static struct i2c_board_info eukrea_mbimx27_i2c_devices[] = {
	{
コード例 #9
0
static int mx21ads_sdhc_init(struct device *dev, irq_handler_t detect_irq,
	void *data)
{
	return request_irq(IRQ_GPIOD(25), detect_irq,
		IRQF_TRIGGER_FALLING, "mmc-detect", data);
}