// SPDX-License-Identifier: GPL-2.0-only /* * linux/drivers/pcmcia/pxa2xx_colibri.c * * Driver for Toradex Colibri PXA270 CF socket * * Copyright (C) 2010 Marek Vasut */ #include #include #include #include #include "soc_common.h" static struct gpio_desc *ppen_gpio; static int colibri_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { struct device *dev = skt->socket.dev.parent; skt->stat[SOC_STAT_CD].name = "detect"; skt->stat[SOC_STAT_BVD1].name = "bvd1"; skt->stat[SOC_STAT_BVD2].name = "bvd2"; skt->stat[SOC_STAT_RDY].name = "ready"; skt->gpio_reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); if (IS_ERR(skt->gpio_reset)) return PTR_ERR(skt->gpio_reset); ppen_gpio = devm_gpiod_get(dev, "ppen", GPIOD_OUT_LOW); if (IS_ERR(ppen_gpio)) return PTR_ERR(ppen_gpio); return soc_pcmcia_request_gpiods(skt); } static int colibri_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { gpiod_set_value(ppen_gpio, !(state->Vcc == 33 && state->Vpp < 50)); return 0; } static struct pcmcia_low_level colibri_pcmcia_ops = { .owner = THIS_MODULE, .first = 0, .nr = 1, .hw_init = colibri_pcmcia_hw_init, .socket_state = soc_common_cf_socket_state, .configure_socket = colibri_pcmcia_configure_socket, }; static struct platform_device *colibri_pcmcia_device; static int __init colibri_pcmcia_init(void) { int ret; if (!machine_is_colibri() && !machine_is_colibri320()) return -ENODEV; colibri_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); if (!colibri_pcmcia_device) return -ENOMEM; ret = platform_device_add_data(colibri_pcmcia_device, &colibri_pcmcia_ops, sizeof(colibri_pcmcia_ops)); if (!ret) ret = platform_device_add(colibri_pcmcia_device); if (ret) platform_device_put(colibri_pcmcia_device); return ret; } static void __exit colibri_pcmcia_exit(void) { platform_device_unregister(colibri_pcmcia_device); } module_init(colibri_pcmcia_init); module_exit(colibri_pcmcia_exit); MODULE_AUTHOR("Marek Vasut "); MODULE_DESCRIPTION("PCMCIA support for Toradex Colibri PXA270/PXA320"); MODULE_ALIAS("platform:pxa2xx-pcmcia"); MODULE_LICENSE("GPL");