Hello Sascha, On 28.03.22 11:44, Sascha Hauer wrote: > On Sat, Mar 19, 2022 at 08:24:08AM +0100, Ahmad Fatoum wrote: >> Driver has been matched by name only so far, add optional support for >> the device tree binding. >> >> Signed-off-by: Ahmad Fatoum <ahmad@xxxxxx> >> --- >> drivers/mci/mci_spi.c | 31 +++++++++++++++++++++++++++++++ >> 1 file changed, 31 insertions(+) > > Applied 2-4, thanks Please drop patch 4 too as it would introduce a non-existent symbol into the defconfig. I will resend both together after incorporating your feedback. Thanks for the review, Ahmad > > Sascha > >> >> diff --git a/drivers/mci/mci_spi.c b/drivers/mci/mci_spi.c >> index ed3ddf890f7f..6ae2824eddc8 100644 >> --- a/drivers/mci/mci_spi.c >> +++ b/drivers/mci/mci_spi.c >> @@ -18,6 +18,8 @@ >> #include <mci.h> >> #include <crc.h> >> #include <crc7.h> >> +#include <of.h> >> +#include <gpiod.h> >> >> #define to_spi_host(mci) container_of(mci, struct mmc_spi_host, mci) >> #define spi_setup(spi) spi->master->setup(spi) >> @@ -47,6 +49,7 @@ struct mmc_spi_host { >> struct mci_host mci; >> struct spi_device *spi; >> struct device_d *dev; >> + int detect_pin; >> >> /* for bulk data transfers */ >> struct spi_transfer t_tx; >> @@ -351,8 +354,23 @@ static int mmc_spi_init(struct mci_host *mci, struct device_d *mci_dev) >> return 0; >> } >> >> +static int spi_mci_card_present(struct mci_host *mci) >> +{ >> + struct mmc_spi_host *host = to_spi_host(mci); >> + int ret; >> + >> + /* No gpio, assume card is present */ >> + if (!gpio_is_valid(host->detect_pin)) >> + return 1; >> + >> + ret = gpio_get_value(host->detect_pin); >> + >> + return ret == 0 ? 1 : 0; >> +} >> + >> static int spi_mci_probe(struct device_d *dev) >> { >> + struct device_node *np = dev_of_node(dev); >> struct spi_device *spi = (struct spi_device *)dev->type_data; >> struct mmc_spi_host *host; >> void *ones; >> @@ -362,6 +380,7 @@ static int spi_mci_probe(struct device_d *dev) >> host->mci.send_cmd = mmc_spi_request; >> host->mci.set_ios = mmc_spi_set_ios; >> host->mci.init = mmc_spi_init; >> + host->mci.card_present = spi_mci_card_present; >> host->mci.hw_dev = dev; >> >> /* MMC and SD specs only seem to care that sampling is on the >> @@ -415,14 +434,26 @@ static int spi_mci_probe(struct device_d *dev) >> >> host->mci.voltages = MMC_VDD_32_33 | MMC_VDD_33_34; >> host->mci.host_caps = MMC_CAP_SPI; >> + host->detect_pin = -EINVAL; >> + >> + if (np) { >> + host->mci.devname = xstrdup(of_alias_get(np)); >> + host->detect_pin = gpiod_get(dev, NULL, GPIOD_IN); >> + } >> >> mci_register(&host->mci); >> >> return 0; >> } >> >> +static __maybe_unused struct of_device_id spi_mci_compatible[] = { >> + { .compatible = "mmc-spi-slot" }, >> + { /* sentinel */ } >> +}; >> + >> static struct driver_d spi_mci_driver = { >> .name = "spi_mci", >> .probe = spi_mci_probe, >> + .of_compatible = DRV_OF_COMPAT(spi_mci_compatible), >> }; >> device_spi_driver(spi_mci_driver); >> -- >> 2.34.1 >> >> >> _______________________________________________ >> barebox mailing list >> barebox@xxxxxxxxxxxxxxxxxxx >> http://lists.infradead.org/mailman/listinfo/barebox >> > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox