spi: driver for Cirrus EP93xx SPI controller
v7 cover spi: driver for Cirrus EP93xx SPI controller
Hello,
This series implements SPI master driver for Cirrus Logic EP93xx SPI controllers.
Changes to previous (v6) version:
- only cosmetic non-functional changes (removed unnecessary comments and few inlines) based on review comments by H Hartley Sweeten
Tested on TS-7260 (ep9302) and Sim.One (ep9307) boards with mmc_spi and at25 drivers.
Note that patch 2/2 depends on patch that is already in Russell's patch tracking system (and in linux-next)
http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=5998/1
So 2/2 should probably go in via Russell's tree.
Regards,
MW
Mika Westerberg (2):
spi: implemented driver for Cirrus EP93xx SPI controller
ep93xx: SPI driver platform support code
Documentation/spi/ep93xx_spi | 95 +++ arch/arm/mach-ep93xx/clock.c | 13 + arch/arm/mach-ep93xx/core.c | 52 ++ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 1 + arch/arm/mach-ep93xx/include/mach/ep93xx_spi.h | 27 + arch/arm/mach-ep93xx/include/mach/platform.h | 4 + drivers/spi/Kconfig | 10 + drivers/spi/Makefile | 1 + drivers/spi/ep93xx_spi.c | 938 +++++++++++++++++++++++ 9 files changed, 1141 insertions(+), 0 deletions(-) create mode 100644 Documentation/spi/ep93xx_spi create mode 100644 arch/arm/mach-ep93xx/include/mach/ep93xx_spi.h create mode 100644 drivers/spi/ep93xx_spi.c
PATCH v7 1/2 spi: implemented driver for Cirrus EP93xx SPI controller
This patch adds an SPI master driver for the Cirrus EP93xx SPI controller found in EP93xx chips.
--- Documentation/spi/ep93xx_spi | 95 +++ arch/arm/mach-ep93xx/include/mach/ep93xx_spi.h | 27 + drivers/spi/Kconfig | 10 + drivers/spi/Makefile | 1 + drivers/spi/ep93xx_spi.c | 938 ++++++++++++++++++++++++ 5 files changed, 1071 insertions(+), 0 deletions(-) create mode 100644 Documentation/spi/ep93xx_spi create mode 100644 arch/arm/mach-ep93xx/include/mach/ep93xx_spi.h create mode 100644 drivers/spi/ep93xx_spi.c
Documentation/spi/ep93xx_spi new file +95 -0
@@ -0,0 +1,95 @@ +Cirrus EP93xx SPI controller driver HOWTO +========================================= + +ep93xx_spi driver brings SPI master support for EP93xx SPI controller. Chip +selects are implemented with GPIO lines. + +NOTE: If possible, don't use SFRMOUT (SFRM1) signal as a chip select. It will +not work correctly (it cannot be controlled by software). Use GPIO lines +instead. + +Sample configuration +==================== + +Typically driver configuration is done in platform board files (the files under +arch/arm/mach-ep93xx/*.c). In this example we configure MMC over SPI through +this driver on TS-7260 board. You can adapt the code to suit your needs. + +This example uses EGPIO9 as SD/MMC card chip select (this is wired in DIO1 +header on the board). + +You need to select CONFIG_MMC_SPI to use mmc_spi driver. + +arch/arm/mach-ep93xx/ts72xx.c: + +... +#include <linux/gpio.h> +#include <linux/spi/spi.h> + +#include <mach/ep93xx_spi.h> + +/* this is our GPIO line used for chip select */ +#define MMC_CHIP_SELECT_GPIO EP93XX_GPIO_LINE_EGPIO9 + +static int ts72xx_mmc_spi_setup(struct spi_device *spi) +{ + int err; + + err = gpio_request(MMC_CHIP_SELECT_GPIO, spi->modalias); + if (err) + return err; + + gpio_direction_output(MMC_CHIP_SELECT_GPIO, 1); + + return 0; +} + +static void ts72xx_mmc_spi_cleanup(struct spi_device *spi) +{ + gpio_set_value(MMC_CHIP_SELECT_GPIO, 1); + gpio_direction_input(MMC_CHIP_SELECT_GPIO); + gpio_free(MMC_CHIP_SELECT_GPIO); +} + +static void ts72xx_mmc_spi_cs_control(struct spi_device *spi, int value) +{ + gpio_set_value(MMC_CHIP_SELECT_GPIO, value); +} + +static struct ep93xx_spi_chip_ops ts72xx_mmc_spi_ops = { + .setup = ts72xx_mmc_spi_setup, + .cleanup = ts72xx_mmc_spi_cleanup, + .cs_control = ts72xx_mmc_spi_cs_control, +}; + +static struct spi_board_info ts72xx_spi_devices[] __initdata = { + { + .modalias = "mmc_spi", + .controller_data = &ts72xx_mmc_spi_ops, + /* + * We use 10 MHz even though the maximum is 7.4 MHz. The driver + * will limit it automatically to max. frequency. + */ + .max_speed_hz = 10 * 1000 * 1000, + .bus_num = 0, + .chip_select = 0, + .mode = SPI_MODE_0, + }, +}; + +static struct ep93xx_spi_info ts72xx_spi_info = { + .num_chipselect = ARRAY_SIZE(ts72xx_spi_devices), +}; + +static void __init ts72xx_init_machine(void) +{ + ... + ep93xx_register_spi(&ts72xx_spi_info, ts72xx_spi_devices, + ARRAY_SIZE(ts72xx_spi_devices)); +} + +Thanks to +========= +Martin Guy, H. Hartley Sweeten and others who helped me during development of +the driver. Simplemachines.it donated me a Sim.One board which I used testing +the driver on EP9307.
arch/arm/mach-ep93xx/include/mach/ep93xx_spi.h new file +27 -0
@@ -0,0 +1,27 @@ +#ifndef __ASM_MACH_EP93XX_SPI_H +#define __ASM_MACH_EP93XX_SPI_H + +struct spi_device ; + +/** +* struct ep93xx_spi_info - EP93xx specific SPI descriptor +* @num_chipselect: number of chip selects on this board, must be +* at least one +*/ +struct ep93xx_spi_info { +int num_chipselect; +}; + +/** +* struct ep93xx_spi_chip_ops - operation callbacks for SPI slave device +* @setup: setup the chip select mechanism +* @cleanup: cleanup the chip select mechanism +* @cs_control: control the device chip select +*/ +struct ep93xx_spi_chip_ops { +int (*setup)(struct spi_device *spi); +void (*cleanup)(struct spi_device *spi); +void (*cs_control)(struct spi_device *spi,int value); +}; + +#endif /* __ASM_MACH_EP93XX_SPI_H */
drivers/spi/Kconfig +10 -0
@@ -117,6 +117,16 @@ config SPI_DAVINCI help SPI master controller for DaVinci and DA8xx SPI modules. +config SPI_EP93XX + tristate "Cirrus Logic EP93xx SPI controller" + depends on ARCH_EP93XX + help + This enables using the Cirrus EP93xx SPI controller in master + mode. + + To compile this driver as a module, choose M here. The module will be + called ep93xx_spi. + config SPI_GPIO tristate "GPIO-based bitbanging SPI Master" depends on GENERIC_GPIO
drivers/spi/Makefile +1 -0
@@ -21,6 +21,7 @@ obj-$(CONFIG_SPI_DAVINCI) += davinci_spi.o obj-$(CONFIG_SPI_DESIGNWARE) += dw_spi.o obj-$(CONFIG_SPI_DW_PCI) += dw_spi_pci.o obj-$(CONFIG_SPI_DW_MMIO) += dw_spi_mmio.o +obj-$(CONFIG_SPI_EP93XX) += ep93xx_spi.o obj-$(CONFIG_SPI_GPIO) += spi_gpio.o obj-$(CONFIG_SPI_IMX) += spi_imx.o obj-$(CONFIG_SPI_LM70_LLP) += spi_lm70llp.o
drivers/spi/ep93xx_spi.c new file +938 -0
938 lines not on this page · raw message
Signature · 1 line
1.5.6.5
PATCH v7 1/2 spi: implemented driver for Cirrus EP93xx SPI controller
Quoted 2 lines · Mika Westerberg
This patch adds an SPI master driver for the Cirrus EP93xx SPI controller found
in EP93xx chips.
Hi
I'm confused by the change in this version of the structure of the
board setup code.
Can you post example patches for the board definitions of the
ts72xx and maybe also the Sim.One?
I attach the board setup patches I had working with Sim.One v4, but
no longer see how to register the S1's card detect IRQ (the necessary and the spi platform data.
For a definitive Sim.One board definition I'll need to hear whether
they wish to assign a GPIO for the chip select (and which) in the next board revision.
Thanks
M
PATCH v7 1/2 spi: implemented driver for Cirrus EP93xx SPI controller
Quoted 1 line · Martin Guy
I attach the board setup patches I had working with Sim.One v4
M
-------------- next part --------------
A non-text attachment was scrubbed...
Name: simone-add-mmc_spi-2.6.34.patch
Type: text/x-diff
Size: 3365 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100508/b8686c45/attachment.bin>
PATCH v7 1/2 spi: implemented driver for Cirrus EP93xx SPI controller
In reply to Martin GuyQuoted 6 lines · Martin Guy
Quoted 2 lines · Mika Westerberg
This patch adds an SPI master driver for the Cirrus EP93xx SPI controller found
in EP93xx chips.I'm confused by the change in this version of the structure of the
board setup code.
Yeah. We changed it to support also other than built-in GPIOs.
Quoted 2 lines
Can you post example patches for the board definitions of the
ts72xx and maybe also the Sim.One?
Sample code for TS-7260 can be found Documentation/spi/ep93xx_spi (which comes with the first patch).
For Sim.One, I modified your patches a bit and resulting patch is included. Note that I have hooked EGPIO9 as a chip select but in normal case (SFRMOUT) you can just do following (leave .controller_data as NULL):
static struct spi_board_info simone_spi_devices[] __initdata = {
{
.modalias = "mmc_spi",
.platform_data = &simone_mmc_spi_data,
/*
* We use 10 MHz even though the maximum is 3.7 MHz. The driver
* will limit it automatically to max. frequency.
*/
.max_speed_hz = 10 * 1000 * 1000,
.bus_num = 0,
.chip_select = 0,
.mode = SPI_MODE_0,
},
};Regards,
MW
Quoted 1 line
From
04034329d0442b4a4b30f83fa0bdbd28cf65362fMon Sep 17 00:00:00 2001
From: Mika Westerberg <[email protected]>
Date: Wed, 28 Apr 2010 08:42:46 +0300
Subject: [PATCH] ep93xx: simone: added board specific SPI support for MMC/SD cards
This includes setting up EGPIOs 0 and 9 for card detection and chip select respectively.
--- arch/arm/mach-ep93xx/simone.c | 126 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 126 insertions(+), 0 deletions(-)
arch/arm/mach-ep93xx/simone.c +126 -0
@@ -18,13 +18,17 @@#include <linux/kernel.h> #include <linux/init.h> #include <linux/platform_device.h> +#include <linux/mmc/host.h> #include <linux/mtd/physmap.h> #include <linux/gpio.h> +#include <linux/spi/spi.h> +#include <linux/spi/mmc_spi.h> #include <linux/i2c.h> #include <linux/i2c-gpio.h> #include <mach/hardware.h> #include <mach/fb.h> +#include <mach/ep93xx_spi.h> #include <asm/mach-types.h> #include <asm/mach/arch.h>
@@ -59,6 +63,126 @@ static struct ep93xxfb_mach_info simone_fb_info = { .flags = EP93XXFB_USE_SDCSN0 | EP93XXFB_PCLK_FALLING, }; +/* +* GPIO lines used for MMC chip select and card detection. +*/ +#define MMC_CARD_DETECT_GPIO EP93XX_GPIO_LINE_EGPIO0 +#define MMC_CHIP_SELECT_GPIO EP93XX_GPIO_LINE_EGPIO9 + +/* +* MMC SPI chip select GPIO handling. If you are using SFRMOUT (SFRM1) signal, +* you can leave these empty and pass NULL as .controller_data. +*/ + +static int simone_mmc_spi_setup (struct spi_device *spi) +{ +unsigned int gpio =MMC_CHIP_SELECT_GPIO ; +int err; + + err =gpio_request (gpio, spi->modalias); +if (err) +return err; + + err =gpio_direction_output (gpio,1 ); +if (err) { +gpio_free (gpio); +return err; + } + +return 0 ; +} + +static void simone_mmc_spi_cleanup (struct spi_device *spi) +{ +unsigned int gpio =MMC_CHIP_SELECT_GPIO ; + +gpio_set_value (gpio,1 ); +gpio_direction_input (gpio); +gpio_free (gpio); +} + +static void simone_mmc_spi_cs_control (struct spi_device *spi,int value) +{ +gpio_set_value (MMC_CHIP_SELECT_GPIO , value); +} + +static struct ep93xx_spi_chip_ops simone_mmc_spi_ops = { + .setup = simone_mmc_spi_setup, + .cleanup = simone_mmc_spi_cleanup, + .cs_control = simone_mmc_spi_cs_control, +}; + +/* +* MMC card detection GPIO setup. +*/ + +static int simone_mmc_spi_init (struct device *dev, +irqreturn_t (*irq_handler)(int ,void *),void *mmc) +{ +unsigned int gpio =MMC_CARD_DETECT_GPIO ; +int irq, err; + + err =gpio_request (gpio,dev_name (dev)); +if (err) +return err; + + err =gpio_direction_input (gpio); +if (err) + goto fail; + + irq =gpio_to_irq (gpio); +if (irq <0 ) + goto fail; + + err =request_irq (irq, irq_handler,IRQF_TRIGGER_FALLING , +"MMC card detect" , mmc); +if (err) + goto fail; + +printk (KERN_INFO "%s: using irq %d for MMC card detection\n" , +dev_name (dev), irq); + +return 0 ; +fail: +gpio_free (gpio); +return err; +} + +static void simone_mmc_spi_exit (struct device *dev,void *mmc) +{ +unsigned int gpio =MMC_CARD_DETECT_GPIO ; + +free_irq (gpio_to_irq (gpio), mmc); +gpio_free (gpio); +} + +static struct mmc_spi_platform_data simone_mmc_spi_data = { + .init = simone_mmc_spi_init, + .exit = simone_mmc_spi_exit, + .detect_delay =500 , + .ocr_mask =MMC_VDD_32_33 |MMC_VDD_33_34 , +}; + +static struct spi_board_info simone_spi_devices[]__initdata = { + { + .modalias ="mmc_spi" , + .controller_data = &simone_mmc_spi_ops, + .platform_data = &simone_mmc_spi_data, +/* +* We use 10 MHz even though the maximum is 3.7 MHz. The driver +* will limit it automatically to max. frequency. +*/ + .max_speed_hz =10 *1000 *1000 , + .bus_num =0 , + .chip_select =0 , + .mode =SPI_MODE_0 , + }, +}; + +static struct ep93xx_spi_info simone_spi_info__initdata = { + .num_chipselect =ARRAY_SIZE (simone_spi_devices), +}; +static struct i2c_gpio_platform_data simone_i2c_gpio_data = { .sda_pin =EP93XX_GPIO_LINE_EEDAT , .sda_is_open_drain =0 ,
@@ -83,6 +207,8 @@ static void __init simone_init_machine(void)ep93xx_register_fb (&simone_fb_info);ep93xx_register_i2c (&simone_i2c_gpio_data, simone_i2c_board_info,ARRAY_SIZE (simone_i2c_board_info)); +ep93xx_register_spi (&simone_spi_info, simone_spi_devices, +ARRAY_SIZE (simone_spi_devices)); }MACHINE_START (SIM_ONE ,"Simplemachines Sim.One Board" )
Signature · 1 line
1.5.6.5
PATCH v7 1/2 spi: implemented driver for Cirrus EP93xx SPI controller
Quoted 5 lines · Mika Westerberg
Quoted 3 lines · Martin Guy
Quoted 2 lines · Mika Westerberg
This patch adds an SPI master driver for the Cirrus EP93xx SPI controller found
in EP93xx chips.
Quoted 7 lines
Quoted 2 lines
I'm confused by the change in this version of the structure of the
board setup code.For Sim.One, I modified your patches a bit and resulting patch is included. Note that I have hooked EGPIO9 as a chip select but in normal case (SFRMOUT) you can just do following (leave .controller_data as NULL):
Many thanks. If you want to submit this to mainline there are just a couple of changes to make:
Quoted 1 line
+#define
MMC_CHIP_SELECT_GPIOEP93XX_GPIO_LINE_EGPIO9
EGPIO9 is part of the keyboard controller - I don't think we can hijack that for a patch to the mainline kernel! I've used EGPIO15 which is unused and on TP17 just south of the CPU.
Quoted 1 line
.mode =
SPI_MODE_0,
Using SPI_MODE_3 increases the read speed from 319 kB/s to 367 kB/s - even when using a GPIO as the chip select.
Your 4GB card fix works here too, though I'm seeing no difference in anything between using SFRMOUT and a GPIO for the chip select. Did you see any functionality or performance improvements using a GPIO for CS with the SD cards you are testing?
Thanks again
M
PATCH v7 1/2 spi: implemented driver for Cirrus EP93xx SPI controller
Quoted 14 lines · Martin Guy
Quoted 5 lines · Mika Westerberg
Quoted 3 lines · Martin Guy
Quoted 2 lines · Mika Westerberg
This patch adds an SPI master driver for the Cirrus EP93xx SPI controller found
in EP93xx chips.Quoted 7 lines
Quoted 2 lines
I'm confused by the change in this version of the structure of the
board setup code.For Sim.One, I modified your patches a bit and resulting patch is included. Note that I have hooked EGPIO9 as a chip select but in normal case (SFRMOUT) you can just do following (leave .controller_data as NULL):
Quoted 8 lines
Many thanks. If you want to submit this to mainline there are just a couple of changes to make:
Quoted 1 line
+#define
MMC_CHIP_SELECT_GPIOEP93XX_GPIO_LINE_EGPIO9EGPIO9 is part of the keyboard controller - I don't think we can hijack that for a patch to the mainline kernel! I've used EGPIO15 which is unused and on TP17 just south of the CPU.
It was just my own hack ;) Maybe I also use EGPIO15 for the chip select.
I think that we can submit this to mainline only after next Sim.One revision (is there going to be next one?) where we know what that GPIO line will be.
Quoted 4 lines
Quoted 1 line
.mode =
SPI_MODE_0,Using
SPI_MODE_3increases the read speed from 319 kB/s to 367 kB/s - even when using a GPIO as the chip select.
OK. So we will use MODE_3 in Sim.One (and maybe in TS-7260). Thanks.
Quoted 4 lines
Your 4GB card fix works here too, though I'm seeing no difference in anything between using SFRMOUT and a GPIO for the chip select. Did you see any functionality or performance improvements using a GPIO for CS with the SD cards you are testing?
Actually no. But at least chipselect should work better so I guess it could help with cards that haven't previously worked.
That 4GB hack is something that need to be further investigated; It shows that some SDHC cards (at least) will fail when reading last (Linux) block using multiblock read.
Regards,
MW
PATCH v7 1/2 spi: implemented driver for Cirrus EP93xx SPI controller
In reply to Mika WesterbergQuoted 6 lines · Mika Westerberg
This patch adds an SPI master driver for the Cirrus EP93xx SPI controller found
in EP93xx chips.Signed-off-by Mika Westerberg <[email protected]>Signed-off-by H Hartley Sweeten <[email protected]>
PATCH v7 1/2 spi: implemented driver for Cirrus EP93xx SPI controller
In reply to Mika WesterbergQuoted 10 lines · Mika Westerberg
This patch adds an SPI master driver for the Cirrus EP93xx SPI controller found in EP93xx chips.
Signed-off-by Mika Westerberg <[email protected]>Signed-off-by H Hartley Sweeten <[email protected]>Cc Ryan Mallon <[email protected]>Cc David Brownell <[email protected]>Cc Grant Likely <[email protected]>Cc Martin Guy <[email protected]>
Hi Grant,
Ping. Any change getting this driver into .35? Platform side code is already in linux-next.
Thanks,
MW
PATCH v7 1/2 spi: implemented driver for Cirrus EP93xx SPI controller
Quoted 12 lines · Mika Westerberg
Quoted 10 lines · Mika Westerberg
This patch adds an SPI master driver for the Cirrus EP93xx SPI controller found in EP93xx chips.
Signed-off-by Mika Westerberg <[email protected]>Signed-off-by H Hartley Sweeten <[email protected]>Cc Ryan Mallon <[email protected]>Cc David Brownell <[email protected]>Cc Grant Likely <[email protected]>Cc Martin Guy <[email protected]>
Quoted 4 lines
Hi Grant,
Ping. Any change getting this driver into .35? Platform side code is already in linux-next.
That is my plan.
g.
PATCH v7 2/2 ep93xx: SPI driver platform support code
In reply to Mika WesterbergThis patch adds platform side support code for the EP93xx SPI driver. This includes clock, resources and muxing. There is a new function: ep93xx_register_spi() which can be used by board support code to register new SPI devices for the board.
--- arch/arm/mach-ep93xx/clock.c | 13 ++++++ arch/arm/mach-ep93xx/core.c | 52 +++++++++++++++++++++++ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 1 + arch/arm/mach-ep93xx/include/mach/platform.h | 4 ++ 4 files changed, 70 insertions(+), 0 deletions(-)
arch/arm/mach-ep93xx/clock.c +13 -0
@@ -96,6 +96,10 @@ static struct clk clk_keypad = { .enable_mask = EP93XX_SYSCON_KEYTCHCLKDIV_KEN, .set_rate = set_keytchclk_rate, }; +static struct clk clk_spi = { + .parent = &clk_xtali, + .rate =EP93XX_EXT_CLK_RATE , +};static struct clk clk_pwm = { .parent = &clk_xtali, .rate =EP93XX_EXT_CLK_RATE ,
@@ -186,6 +190,7 @@ static struct clk_lookup clocks[] = {INIT_CK ("ep93xx-ohci" ,NULL , &clk_usb_host),INIT_CK ("ep93xx-keypad" ,NULL , &clk_keypad),INIT_CK ("ep93xx-fb" ,NULL , &clk_video), +INIT_CK ("ep93xx-spi.0" ,NULL , &clk_spi),INIT_CK (NULL ,"pwm_clk" , &clk_pwm),INIT_CK (NULL ,"m2p0" , &clk_m2p0), INIT_CK(NULL, "m2p1", &clk_m2p1),
@@ -473,6 +478,14 @@ static int __init ep93xx_clock_init(void)/* Initialize the pll2 derived clocks */ clk_usb_host.rate = clk_pll2.rate / (((value >>28 ) &0xf ) +1 ); +/* +* EP93xx SSP clock rate was doubled in version E2. For more information +* see: +* http://www.cirrus.com/en/pubs/appNote/AN273REV4.pdf +*/ +if (ep93xx_chip_revision () <EP93XX_CHIP_REV_E2 ) + clk_spi.rate /=2 ; +pr_info ("PLL1 running at %ld MHz, PLL2@%ld MHz\n" , clk_pll1.rate /1000000 , clk_pll2.rate /1000000 ); pr_info("FCLK %ld MHz, HCLK %ld MHz, PCLK %ld MHz\n",
arch/arm/mach-ep93xx/core.c +52 -0
68 lines not on this page · raw message
arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h +1 -0
@@ -106,6 +106,7 @@#define EP93XX_AAC_BASE EP93XX_APB_IOMEM(0x00080000) +#define EP93XX_SPI_PHYS_BASE EP93XX_APB_PHYS(0x000a0000)#define EP93XX_SPI_BASE EP93XX_APB_IOMEM(0x000a0000)#define EP93XX_IRDA_BASE EP93XX_APB_IOMEM(0x000b0000)
arch/arm/mach-ep93xx/include/mach/platform.h +4 -0
@@ -6,9 +6,11 @@struct i2c_gpio_platform_data ;struct i2c_board_info ; +struct spi_board_info ;struct platform_device ;struct ep93xxfb_mach_info ;struct ep93xx_keypad_platform_data ; +struct ep93xx_spi_info ;struct ep93xx_eth_data {
@@ -36,6 +38,8 @@ static inline void ep93xx_devcfg_clear_bits(unsigned int bits)void ep93xx_register_eth (struct ep93xx_eth_data *data,int copy_addr);void ep93xx_register_i2c (struct i2c_gpio_platform_data *data,struct i2c_board_info *devices,int num); +void ep93xx_register_spi (struct ep93xx_spi_info *info, +struct spi_board_info *devices,int num);void ep93xx_register_fb (struct ep93xxfb_mach_info *data);void ep93xx_register_pwm (int pwm0,int pwm1);int ep93xx_pwm_acquire_gpio (struct platform_device *pdev);
Signature · 1 line
1.5.6.5
PATCH v7 2/2 ep93xx: SPI driver platform support code
Quoted 7 lines · Mika Westerberg
This patch adds platform side support code for the EP93xx SPI driver. This
includes clock, resources and muxing. There is a new function:ep93xx_register_spi()which can be used by board support code to register new SPI devices for the board.Signed-off-by Mika Westerberg <[email protected]>