void __init wx5800_pci_hw_init(void)
{
	/* Disable PCI clock */
	*IXP425_GPIO_GPCLKR &= ~IXP425_PCI_CLK_ENABLE;

	/* configure PCI-related GPIO */
	gpio_line_config(IXP425_PCI_CLK_PIN, IXP425_GPIO_OUT);
	gpio_line_config(IXP425_PCI_RESET_GPIO, IXP425_GPIO_OUT);

	gpio_line_config(IXP425_PCI_INTA_GPIO,
	    IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);
	gpio_line_config(IXP425_PCI_INTB_GPIO,
	    IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);

	gpio_line_isr_clear(IXP425_PCI_INTA_GPIO);
	gpio_line_isr_clear(IXP425_PCI_INTB_GPIO);

	/* Assert reset for PCI controller */
	gpio_line_set(IXP425_PCI_RESET_GPIO, IXP425_GPIO_LOW);
	/* wait 1ms to satisfy "minimum reset assertion time" of the PCI spec. */
	udelay(1000);
	/* Config PCI clock */
	*IXP425_GPIO_GPCLKR |= (0xf << IXP425_PCI_CLK_TC_LSH) | 
	    (0xf << IXP425_PCI_CLK_DC_LSH);
	/* Enable PCI clock */
	*IXP425_GPIO_GPCLKR |= IXP425_PCI_CLK_ENABLE;
	/* wait 100us to satisfy "minimum reset assertion time from clock stable"
	 * requirement of the PCI spec. */
	udelay(100);
	/* Deassert reset for PCI controller */
	gpio_line_set(IXP425_PCI_RESET_GPIO, IXP425_GPIO_HIGH);

	/* wait a while to let other devices get ready after PCI reset */
	udelay(1000);
}
static int __init ixdp2400_i2c_init(void)
{
	if(machine_is_ixdp2400()) {
		int i = 0;

		/*
		 * GPIO2 needs to be high for SDA to work on this board
		 */
		gpio_line_set(IXDP2400_GPIO_HIGH, 1);
		gpio_line_config(IXDP2400_GPIO_HIGH, GPIO_OUT);

		ixdp2400_gpio.sda_gpio = IXDP2400_GPIO_SCL;
		ixdp2400_gpio.scl_gpio = IXDP2400_GPIO_SDA;

		gpio_line_config(ixdp2400_gpio.sda_gpio, GPIO_OUT);
		gpio_line_config(ixdp2400_gpio.scl_gpio, GPIO_OUT);

		gpio_line_set(ixdp2400_gpio.scl_gpio, 0);
		gpio_line_set(ixdp2400_gpio.sda_gpio, 0);

		gpio_line_config(ixdp2400_gpio.scl_gpio, GPIO_IN);

		for(i = 0; i < 10; i++);

		gpio_line_config(ixdp2400_gpio.sda_gpio, GPIO_IN);
	}

	if (i2c_bit_add_bus(&ixdp2400_i2c_adapter)) {
		printk("i2c-ixdp2400: I2C adapter registration failed\n");
		return -EIO;
	} else printk("i2c-ixdp2400: I2C bus initialized\n");

	return 0;
}
static void ixp2000_bit_setsda(void *data, int val)
{
	if (val) {
		gpio_line_config(ixp2000_sda_pin(data), GPIO_IN);
	} else {
		gpio_line_config(ixp2000_sda_pin(data), GPIO_OUT);
	}
}
static void ixp2000_bit_setscl(void *data, int val)
{
	int i = 5000;

	if (val) {
		gpio_line_config(ixp2000_scl_pin(data), GPIO_IN);
		while(!gpio_line_get(ixp2000_scl_pin(data)) && i--);
	} else {
		gpio_line_config(ixp2000_scl_pin(data), GPIO_OUT);
	}
}
static void ixdp2400_bit_setsda(void *data, int val)
{
	struct ixdp2400_data *gpio = (struct ixdp2400_data*)data;

	if(val) {
		gpio_line_config(gpio->sda_gpio, GPIO_IN);
	} else {
		gpio_line_config(gpio->sda_gpio, GPIO_OUT);
	}

//	printk("SDA %d PDPR = %#010x\n", val, *IXP2000_GPIO_PDPR);
}
static void ixdp2400_bit_setscl(void *data, int val)
{
	struct ixdp2400_data *gpio = (struct ixdp2400_data*)data; 
	int i = 5000;

	if(val) {
		gpio_line_config(gpio->scl_gpio, GPIO_IN);
		while(!gpio_line_get(gpio->scl_gpio) && i--);
	} else {
		gpio_line_config(gpio->scl_gpio, GPIO_OUT);
	}
}
Example #7
0
void __init coyote_pci_preinit(void)
{
    gpio_line_config(COYOTE_PCI_SLOT0_PIN,
                     IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);

    gpio_line_config(COYOTE_PCI_SLOT1_PIN,
                     IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);

    gpio_line_isr_clear(COYOTE_PCI_SLOT0_PIN);
    gpio_line_isr_clear(COYOTE_PCI_SLOT1_PIN);

    ixp4xx_pci_preinit();
}
Example #8
0
static int ixp4xx_i2c_probe(struct device *dev)
{
	int err;
	struct platform_device *plat_dev = to_platform_device(dev);
	struct ixp4xx_i2c_pins *gpio = plat_dev->dev.platform_data;
	struct ixp4xx_i2c_data *drv_data = 
		kmalloc(sizeof(struct ixp4xx_i2c_data), GFP_KERNEL);

	if(!drv_data)
		return -ENOMEM;

	memzero(drv_data, sizeof(struct ixp4xx_i2c_data));
	drv_data->gpio_pins = gpio;

	/*
	 * We could make a lot of these structures static, but
	 * certain platforms may have multiple GPIO-based I2C
	 * buses for various device domains, so we need per-device
	 * algo_data->data. 
	 */
	drv_data->algo_data.data = gpio;
	drv_data->algo_data.setsda = ixp4xx_bit_setsda;
	drv_data->algo_data.setscl = ixp4xx_bit_setscl;
	drv_data->algo_data.getsda = ixp4xx_bit_getsda;
	drv_data->algo_data.getscl = ixp4xx_bit_getscl;
	drv_data->algo_data.udelay = 10;
	drv_data->algo_data.mdelay = 10;
	drv_data->algo_data.timeout = 100;

	drv_data->adapter.id = I2C_HW_B_IXP4XX,
	drv_data->adapter.algo_data = &drv_data->algo_data,

	drv_data->adapter.dev.parent = &plat_dev->dev;

	gpio_line_config(gpio->scl_pin, IXP4XX_GPIO_IN);
	gpio_line_config(gpio->sda_pin, IXP4XX_GPIO_IN);
	gpio_line_set(gpio->scl_pin, 0);
	gpio_line_set(gpio->sda_pin, 0);

	if ((err = i2c_bit_add_bus(&drv_data->adapter) != 0)) {
		printk(KERN_ERR "ERROR: Could not install %s\n", dev->bus_id);

		kfree(drv_data);
		return err;
	}

	dev_set_drvdata(&plat_dev->dev, drv_data);

	return 0;
}
Example #9
0
void snapi2c_setup(void)
{
	down(&snapi2c_sem);

	/* Initially set the IIC lines to be outputs from the IXP4xx */
	gpio_line_config(SCL, OUT);
	gpio_line_config(SDA, OUT);

	/* Set IIC bus into idle mode */
	gpio_line_set(SCL, 1);
	gpio_line_set(SDA, 1);

	up(&snapi2c_sem);
}
void __init bruce_pci_gpio_init(void)
{
	/* configure PCI-related GPIO */

	gpio_line_config(USB_GPIO, IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);
	gpio_line_config(PATA_GPIO, IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);
	gpio_line_config(SATA_GPIO, IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);
	gpio_line_config(MINIPCI_GPIO, IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);

	gpio_line_isr_clear(USB_GPIO);
	gpio_line_isr_clear(PATA_GPIO);
	gpio_line_isr_clear(SATA_GPIO);
	gpio_line_isr_clear(MINIPCI_GPIO);
}
Example #11
0
void __init coyote_pci_init(void *sysdata)
{
#ifdef CONFIG_PCI_RESET
 if (ixp425_pci_is_host())
   coyote_pci_hw_init();
#endif

 gpio_line_config(IXP425_GPIO_PIN_11, IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);
 gpio_line_config(IXP425_GPIO_PIN_6, IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);

 gpio_line_isr_clear(IXP425_GPIO_PIN_11);
 gpio_line_isr_clear(IXP425_GPIO_PIN_6);

 ixp425_pci_init(sysdata);
}
Example #12
0
File: fiq.c Project: dgeo96/src
static int __init fiq_init(void)
{
	printk("FIQ: installing ERASE button debug FIQ handler\n");

#if 0
	printk("CURRENT FIQ = %08x\n", *((unsigned int *) FIQ_VECTOR));
#endif

	/* Configure Erase switch as IRQ/FIQ input */
	gpio_line_config(ERASEGPIO, (IXP4XX_GPIO_IN));
	set_irq_type(ERASEIRQ, IRQT_FALLING);
	gpio_line_isr_clear(ERASEGPIO);

	*IXP4XX_ICLR |= (1 << ERASEIRQ);

	unprotect_page_0();
	memcpy(FIQ_VECTOR, fiqasm, 96);
        protect_page_0();
        flush_icache_range(FIQ_VECTOR, FIQ_VECTOR + 96);

#if 0
	printk("CURRENT FIQ = %08x\n", *((unsigned int *) FIQ_VECTOR));
#endif

	return 0;
}
Example #13
0
static void n2100_restart(char mode, const char *cmd)
{
	gpio_line_set(N2100_HARDWARE_RESET, GPIO_LOW);
	gpio_line_config(N2100_HARDWARE_RESET, GPIO_OUT);
	while (1)
		;
}
Example #14
0
static int __init dsmg600_power_init(void)
{
	if (!(machine_is_dsmg600()))
		return 0;

	if (request_irq(DSMG600_RB_IRQ, &dsmg600_reset_handler,
		IRQF_DISABLED | IRQF_TRIGGER_LOW, "DSM-G600 reset button",
		NULL) < 0) {

		printk(KERN_DEBUG "Reset Button IRQ %d not available\n",
			DSMG600_RB_IRQ);

		return -EIO;
	}

	/* The power button on the D-Link DSM-G600 is on GPIO 15, but
	 * it cannot handle interrupts on that GPIO line.  So we'll
	 * have to poll it with a kernel timer.
	 */

	/* Make sure that the power button GPIO is set up as an input */
	gpio_line_config(DSMG600_PB_GPIO, IXP4XX_GPIO_IN);

	/* Set the initial value for the power button IRQ handler */
	power_button_countdown = PBUTTON_HOLDDOWN_COUNT;

	mod_timer(&dsmg600_power_timer, jiffies + msecs_to_jiffies(500));

	return 0;
}
Example #15
0
static void __init ixdp425_init(void)
{
	ixp4xx_sys_init();

	ixdp425_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
	ixdp425_flash_resource.end =
		IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;

#if defined(CONFIG_MTD_NAND_PLATFORM) || \
    defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
	ixdp425_flash_nand_resource.start = IXP4XX_EXP_BUS_BASE(3),
	ixdp425_flash_nand_resource.end   = IXP4XX_EXP_BUS_BASE(3) + 0x10 - 1;

	gpio_line_config(IXDP425_NAND_NCE_PIN, IXP4XX_GPIO_OUT);

	/* Configure expansion bus for NAND Flash */
	*IXP4XX_EXP_CS3 = IXP4XX_EXP_BUS_CS_EN |
			  IXP4XX_EXP_BUS_STROBE_T(1) |	/* extend by 1 clock */
			  IXP4XX_EXP_BUS_CYCLES(0) |	/* Intel cycles */
			  IXP4XX_EXP_BUS_SIZE(0) |	/* 512bytes addr space*/
			  IXP4XX_EXP_BUS_WR_EN |
			  IXP4XX_EXP_BUS_BYTE_EN;	/* 8 bit data bus */
#endif

	if (cpu_is_ixp43x()) {
		ixdp425_uart.num_resources = 1;
		ixdp425_uart_data[1].flags = 0;
	}

	platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices));
}
void __init montejade_pci_init(void *sysdata)
{
	printk("PCI: reset bus...\n");
	gpio_line_set(IXP425_GPIO_PIN_8, 0);
	gpio_line_config(IXP425_GPIO_PIN_8, IXP425_GPIO_OUT);
	gpio_line_set(IXP425_GPIO_PIN_8, 0);
	mdelay(50);
	gpio_line_set(IXP425_GPIO_PIN_8, 1);
	mdelay(50);

	gpio_line_config(INTA_PIN, IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);
	gpio_line_config(INTB_PIN, IXP425_GPIO_IN | IXP425_GPIO_ACTIVE_LOW);
	gpio_line_isr_clear(INTA_PIN);
	gpio_line_isr_clear(INTB_PIN);

	ixp425_pci_init(sysdata);
}
Example #17
0
static void dsmg600_power_off(void)
{
	/* enable the pwr cntl gpio */
	gpio_line_config(DSMG600_PO_GPIO, IXP4XX_GPIO_OUT);

	/* poweroff */
	gpio_line_set(DSMG600_PO_GPIO, IXP4XX_GPIO_HIGH);
}
Example #18
0
static int ixp4xx_gpio_direction_output(struct gpio_chip *chip, unsigned gpio,
					int level)
{
	gpio_line_set(gpio, level);
	gpio_line_config(gpio, IXP4XX_GPIO_OUT);

	return 0;
}
void __init ixdp2x00_init_machine(void)
{
	gpio_line_set(IXDP2X00_GPIO_I2C_ENABLE, 1);
	gpio_line_config(IXDP2X00_GPIO_I2C_ENABLE, GPIO_OUT);

	platform_add_devices(ixdp2x00_devices, ARRAY_SIZE(ixdp2x00_devices));
	ixp2000_uart_init();
}
Example #20
0
static int ixp4xx_bit_getscl(void *data)
{
	int scl;

	gpio_line_config(ixp4xx_scl_pin(data), IXP4XX_GPIO_IN );
	gpio_line_get(ixp4xx_scl_pin(data), &scl);

	return scl;
}	
Example #21
0
static int ixp4xx_bit_getsda(void *data)
{
	int sda;

	gpio_line_config(ixp4xx_sda_pin(data), IXP4XX_GPIO_IN );
	gpio_line_get(ixp4xx_sda_pin(data), &sda);

	return sda;
}	
Example #22
0
void __init prpmc1100_pci_preinit(void)
{
	gpio_line_config(PRPMC1100_PCI_INTA_PIN, 
				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
	gpio_line_config(PRPMC1100_PCI_INTB_PIN, 
				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
	gpio_line_config(PRPMC1100_PCI_INTC_PIN, 
				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
	gpio_line_config(PRPMC1100_PCI_INTD_PIN, 
				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);

	gpio_line_isr_clear(PRPMC1100_PCI_INTA_PIN);
	gpio_line_isr_clear(PRPMC1100_PCI_INTB_PIN);
	gpio_line_isr_clear(PRPMC1100_PCI_INTC_PIN);
	gpio_line_isr_clear(PRPMC1100_PCI_INTD_PIN);

	ixp4xx_pci_preinit();
}
Example #23
0
void __init ess710_pci_preinit(void)
{
	printk("PCI: reset bus...\n");
	gpio_line_set(13, 0);
	gpio_line_config(13, IXP4XX_GPIO_OUT);
	gpio_line_set(13, 0);
	mdelay(50);
	gpio_line_set(13, 1);
	mdelay(50);

	gpio_line_config(6, IXP4XX_GPIO_IN);
	set_irq_type(IRQ_IXP4XX_GPIO6, IRQT_LOW); /* INTA */
	gpio_line_config(7, IXP4XX_GPIO_IN);
	set_irq_type(IRQ_IXP4XX_GPIO7, IRQT_LOW); /* INTB */
	gpio_line_config(8, IXP4XX_GPIO_IN);
	set_irq_type(IRQ_IXP4XX_GPIO8, IRQT_LOW); /* INTC */

	ixp4xx_pci_preinit();
}
static void nslu2_power_off(void)
{
	/*                                                    */

	/*                          */
	gpio_line_config(NSLU2_PO_GPIO, IXP4XX_GPIO_OUT);

	/*             */
	gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH);
}
static void nas100d_power_off(void)
{
	/* This causes the box to drop the power and go dead. */

	/* enable the pwr cntl gpio */
	gpio_line_config(NAS100D_PO_GPIO, IXP4XX_GPIO_OUT);

	/* do the deed */
	gpio_line_set(NAS100D_PO_GPIO, IXP4XX_GPIO_HIGH);
}
void ivpnss_hwsetup(void)
{
	int i;

	if (ivpnss_hwinited)
		return;

	/* Setup IXP4xx chip selects, CS1 is for 8bit, CS2 is 16bit */
	*IXP425_EXP_CS1 = 0x97d10c03;
	*IXP425_EXP_CS2 = 0x97d10c02;

	/* expansion bus speeds */
//	*IXP425_GPIO_GPCLKR = (*IXP425_GPIO_GPCLKR & 0x0000ffff) | 0x01420000;

	/* Setup IRQ line, we use GPIO7 which maps tp IRQ 24 */
	gpio_line_config(IXP425_GPIO_PIN_7,
		(IXP425_GPIO_IN | IXP425_GPIO_FALLING_EDGE));
	gpio_line_isr_clear(IXP425_GPIO_PIN_7);

	/* Setup PCMCIA/CF REG line (for accessing attribute space) */
	gpio_line_config(IXP425_GPIO_PIN_10, IXP425_GPIO_OUT);
	gpio_line_set(IXP425_GPIO_PIN_10, 1);

	/* Setup PCMCIA/CF IO/MEM (confusingly called RD/WR) select */
	gpio_line_config(IXP425_GPIO_PIN_8, IXP425_GPIO_OUT);
	gpio_line_set(IXP425_GPIO_PIN_10, 1);

	/* Setup PCMCIA/CF RESET line, and issue a short reset */
	gpio_line_set(IXP425_GPIO_PIN_6, 0);
	gpio_line_config(IXP425_GPIO_PIN_6, IXP425_GPIO_OUT);
	/*
	for (i = 0; (i < 100); i++)
		udelay(1000);
	gpio_line_set(IXP425_GPIO_PIN_6, 1);
	*/

	/* Leave the region idling in "attribute" mode */
	ivpnss_mem_mode = MODE_ATTRIBUTE;
	ivpnss_enable_attribute();

	ivpnss_hwinited = 1;
}
Example #27
0
static void output_control(void)
{
	int i;

	gpio_line_config(GPIO_SCL, IXP4XX_GPIO_OUT);
	gpio_line_config(GPIO_SDA, IXP4XX_GPIO_OUT);

	for (i = 0; i < 8; i++) {
		set_scl(0);
		set_sda(control_value & (0x80 >> i)); /* MSB first */
		set_scl(1);	/* active edge */
	}

	set_str(1);
	set_str(0);

	set_scl(0);
	set_sda(1);		/* Be ready for START */
	set_scl(1);
}
static void ixp4xx_spkr_control(unsigned int pin, unsigned int count)
{
	unsigned long flags;

	spin_lock_irqsave(&beep_lock, flags);

	 if (count) {
		gpio_line_config(pin, IXP4XX_GPIO_OUT);
		gpio_line_set(pin, IXP4XX_GPIO_LOW);

		*IXP4XX_OSRT2 = (count & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE;
	} else {
		gpio_line_config(pin, IXP4XX_GPIO_IN);
		gpio_line_set(pin, IXP4XX_GPIO_HIGH);

		*IXP4XX_OSRT2 = 0;
	}

	spin_unlock_irqrestore(&beep_lock, flags);
}
static void output_control(void)
{
	int i;

	gpio_line_config(GPIO_SCL, IXP4XX_GPIO_OUT);
	gpio_line_config(GPIO_SDA, IXP4XX_GPIO_OUT);

	for (i = 0; i < 8; i++) {
		set_scl(0);
		set_sda(control_value & (0x80 >> i)); /*           */
		set_scl(1);	/*             */
	}

	set_str(1);
	set_str(0);

	set_scl(0);
	set_sda(1);		/*                    */
	set_scl(1);
}
Example #30
0
static int ixp2000_i2c_probe(struct platform_device *plat_dev)
{
	int err;
	struct ixp2000_i2c_pins *gpio = plat_dev->dev.platform_data;
	struct ixp2000_i2c_data *drv_data = 
		kzalloc(sizeof(struct ixp2000_i2c_data), GFP_KERNEL);

	if (!drv_data)
		return -ENOMEM;
	drv_data->gpio_pins = gpio;

	drv_data->algo_data.data = gpio;
	drv_data->algo_data.setsda = ixp2000_bit_setsda;
	drv_data->algo_data.setscl = ixp2000_bit_setscl;
	drv_data->algo_data.getsda = ixp2000_bit_getsda;
	drv_data->algo_data.getscl = ixp2000_bit_getscl;
	drv_data->algo_data.udelay = 6;
	drv_data->algo_data.timeout = 100;

	drv_data->adapter.id = I2C_HW_B_IXP2000,
	strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name,
		sizeof(drv_data->adapter.name));
	drv_data->adapter.algo_data = &drv_data->algo_data,

	drv_data->adapter.dev.parent = &plat_dev->dev;

	gpio_line_config(gpio->sda_pin, GPIO_IN);
	gpio_line_config(gpio->scl_pin, GPIO_IN);
	gpio_line_set(gpio->scl_pin, 0);
	gpio_line_set(gpio->sda_pin, 0);

	if ((err = i2c_bit_add_bus(&drv_data->adapter)) != 0) {
		dev_err(&plat_dev->dev, "Could not install, error %d\n", err);
		kfree(drv_data);
		return err;
	} 

	platform_set_drvdata(plat_dev, drv_data);

	return 0;
}