コード例 #1
0
ファイル: pxa2xx_viper.c プロジェクト: nandra/linux-2.6
static int viper_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
{
	struct arcom_pcmcia_pdata *pdata = viper_get_pdata();
	unsigned long flags;

	skt->stat[SOC_STAT_CD].gpio = pdata->cd_gpio;
	skt->stat[SOC_STAT_CD].name = "PCMCIA_CD";
	skt->stat[SOC_STAT_RDY].gpio = pdata->rdy_gpio;
	skt->stat[SOC_STAT_RDY].name = "CF ready";

	if (gpio_request(pdata->pwr_gpio, "CF power"))
		goto err_request_pwr;

	local_irq_save(flags);

	if (gpio_direction_output(pdata->pwr_gpio, 0)) {
		local_irq_restore(flags);
		goto err_dir;
	}

	local_irq_restore(flags);

	return 0;

err_dir:
	gpio_free(pdata->pwr_gpio);
err_request_pwr:
	dev_err(&arcom_pcmcia_dev->dev, "Failed to setup PCMCIA GPIOs\n");
	return -1;
}
コード例 #2
0
ファイル: pxa2xx_viper.c プロジェクト: CSCLOG/beaglebone
/*
 * Release all resources.
 */
static void viper_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
{
	struct arcom_pcmcia_pdata *pdata = viper_get_pdata();

	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
	gpio_free(pdata->pwr_gpio);
	gpio_free(pdata->rdy_gpio);
	gpio_free(pdata->cd_gpio);
}
コード例 #3
0
ファイル: pxa2xx_viper.c プロジェクト: CSCLOG/beaglebone
static void viper_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
				      struct pcmcia_state *state)
{
	struct arcom_pcmcia_pdata *pdata = viper_get_pdata();

	state->detect = !gpio_get_value(pdata->cd_gpio);
	state->ready  = !!gpio_get_value(pdata->rdy_gpio);
	state->bvd1   = 1;
	state->bvd2   = 1;
	state->wrprot = 0;
	state->vs_3v  = 1; /* Can only apply 3.3V */
	state->vs_Xv  = 0;
}
コード例 #4
0
ファイル: pxa2xx_viper.c プロジェクト: CSCLOG/beaglebone
static int viper_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
{
	struct arcom_pcmcia_pdata *pdata = viper_get_pdata();
	unsigned long flags;

	skt->socket.pci_irq = gpio_to_irq(pdata->rdy_gpio);
	irqs[0].irq = gpio_to_irq(pdata->cd_gpio);

	if (gpio_request(pdata->cd_gpio, "CF detect"))
		goto err_request_cd;

	if (gpio_request(pdata->rdy_gpio, "CF ready"))
		goto err_request_rdy;

	if (gpio_request(pdata->pwr_gpio, "CF power"))
		goto err_request_pwr;

	local_irq_save(flags);

	if (gpio_direction_output(pdata->pwr_gpio, 0) ||
	    gpio_direction_input(pdata->cd_gpio) ||
	    gpio_direction_input(pdata->rdy_gpio)) {
		local_irq_restore(flags);
		goto err_dir;
	}

	local_irq_restore(flags);

	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));

err_dir:
	gpio_free(pdata->pwr_gpio);
err_request_pwr:
	gpio_free(pdata->rdy_gpio);
err_request_rdy:
	gpio_free(pdata->cd_gpio);
err_request_cd:
	dev_err(&arcom_pcmcia_dev->dev, "Failed to setup PCMCIA GPIOs\n");
	return -1;
}
コード例 #5
0
ファイル: pxa2xx_viper.c プロジェクト: nandra/linux-2.6
static int viper_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
					 const socket_state_t *state)
{
	struct arcom_pcmcia_pdata *pdata = viper_get_pdata();

	/* Silently ignore Vpp, output enable, speaker enable. */
	pdata->reset(state->flags & SS_RESET);

	/* Apply socket voltage */
	switch (state->Vcc) {
	case 0:
		gpio_set_value(pdata->pwr_gpio, 0);
		break;
	case 33:
		gpio_set_value(pdata->pwr_gpio, 1);
		break;
	default:
		dev_err(&arcom_pcmcia_dev->dev, "Unsupported Vcc:%d\n", state->Vcc);
		return -1;
	}

	return 0;
}
コード例 #6
0
ファイル: pxa2xx_viper.c プロジェクト: nandra/linux-2.6
/*
 * Release all resources.
 */
static void viper_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
{
	struct arcom_pcmcia_pdata *pdata = viper_get_pdata();

	gpio_free(pdata->pwr_gpio);
}