• Linus Walleij's avatar
    spi: imx/fsl-lpspi: Convert to GPIO descriptors · 8cdcd8ae
    Linus Walleij authored
    This converts the two Freescale i.MX SPI drivers
    Freescale i.MX (CONFIG_SPI_IMX) and Freescale i.MX LPSPI
    (CONFIG_SPI_FSL_LPSPI) to use GPIO descriptors handled in
    the SPI core for GPIO chip selects whether defined in
    the device tree or a board file.
    
    The reason why both are converted at the same time is
    that they were both using the same platform data and
    platform device population helpers when using
    board files intertwining the code so this gives a cleaner
    cut.
    
    The platform device creation was passing a platform data
    container from each boardfile down to the driver using
    struct spi_imx_master from <linux/platform_data/spi-imx.h>,
    but this was only conveying the number of chipselects and
    an int * array of the chipselect GPIO numbers.
    
    The imx27 and imx31 platforms had code passing the
    now-unused platform data when creating the platform devices,
    this has been repurposed to pass around GPIO descriptor
    tables. The platform data struct that was just passing an
    array of integers and number of chip selects for the GPIO
    lines has been removed.
    
    The number of chipselects used to be passed from the board
    file, because this number also limits the number of native
    chipselects that the platform can use. To deal with this we
    just augment the i.MX (CONFIG_SPI_IMX) driver to support 3
    chipselects if the platform does not define "num-cs" as a
    device property (such as from the device tree). This covers
    all the legacy boards as these use <= 3 native chip selects
    (or GPIO lines, and in that case the number of chip selects
    is determined by the core from the number of available
    GPIO lines). Any new boards should use device tree, so
    this is a reasonable simplification to cover all old
    boards.
    
    The LPSPI driver never assigned the number of chipselects
    and thus always fall back to the core default of 1 chip
    select if no GPIOs are defined in the device tree.
    
    The Freescale i.MX driver was already partly utilizing
    the SPI core to obtain the GPIO numbers from the device tree,
    so this completes the transtion to let the core handle all
    of it.
    
    All board files and the core i.MX boardfile registration
    code is augmented to account for these changes.
    
    This has been compile-tested with the imx_v4_v5_defconfig
    and the imx_v6_v7_defconfig.
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Acked-by: default avatarShawn Guo <shawnguo@kernel.org>
    Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Cc: Robin Gong <yibin.gong@nxp.com>
    Cc: Trent Piepho <tpiepho@impinj.com>
    Cc: Clark Wang <xiaoning.wang@nxp.com>
    Cc: Shawn Guo <shawnguo@kernel.org>
    Cc: Sascha Hauer <s.hauer@pengutronix.de>
    Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
    Cc: Fabio Estevam <festevam@gmail.com>
    Cc: NXP Linux Team <linux-imx@nxp.com>
    Link: https://lore.kernel.org/r/20200625200252.207614-1-linus.walleij@linaro.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    8cdcd8ae
devices-imx31.h 3.14 KB