Thread (7 messages) flat view 7 messages, 4 authors, 2009-12-09
STALE6105d

[PATCH 3/5] SPI S3C64XX: Header for passing platform data

From: ben-linux@fluff.org (Ben Dooks)
Date: 2009-12-07 14:41:45
Also in: linux-mmc

On Fri, Dec 04, 2009 at 08:06:12PM +0900, jassi brar wrote:
On Fri, Dec 4, 2009 at 7:06 AM, Ben Dooks [off-list ref] wrote:
quoted
On Thu, Nov 26, 2009 at 03:48:17PM +0900, Jassi Brar wrote:
quoted
We need a way to pass controller specific information to the
SPI device driver. For that purpose a new header is made.

Signed-off-by: Jassi Brar <redacted>
---
?arch/arm/plat-s3c64xx/include/plat/spi.h | ? 68 ++++++++++++++++++++++++++++++
?1 files changed, 68 insertions(+), 0 deletions(-)
?create mode 100644 arch/arm/plat-s3c64xx/include/plat/spi.h
diff --git a/arch/arm/plat-s3c64xx/include/plat/spi.h b/arch/arm/plat-s3c64xx/include/plat/spi.h
new file mode 100644
index 0000000..d65ddfd
--- /dev/null
+++ b/arch/arm/plat-s3c64xx/include/plat/spi.h
let's not have all these called spi.h, it will make life more difficult
when trying to find which spi.h we are searching for in our platform
support.
We can call it s3c64xx-spi.h but won't that be kinda redundant as it's
in plat-s3c64xx ?
If it ever gets moved, then there's your first problem case.

The second, is that you look at the top of the driver and see <plat/spi.h>
and then go 'find . -type f -name spi.h' and see how many results you get
for that. Giving it a more descriptive name makes it easier to find the
right header without having to work out what is being included.
 
quoted
quoted
@@ -0,0 +1,68 @@
+/* linux/arch/arm/plat-s3c64xx/include/plat/spi.h
+ *
+ * Copyright (C) 2009 Samsung Electronics Ltd.
+ * ? Jaswinder Singh <jassi.brar@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __S3C64XX_PLAT_SPI_H
+#define __S3C64XX_PLAT_SPI_H __FILE__
+
+#define S3C64XX_SPI_SRCCLK_PCLK ? ? ? ? ? ? ?0
+#define S3C64XX_SPI_SRCCLK_SPIBUS ? ?1
+#define S3C64XX_SPI_SRCCLK_48M ? ? ? ? ? ? ? 2
+
+#define BUSNUM(b) ? ? ? ? ? ?(b)
+
+/**
+ * struct s3c64xx_spi_csinfo - ChipSelect description
+ * @fb_delay: Slave specific feedback delay.
+ * @set_level: CS line control.
+ */
+struct s3c64xx_spi_csinfo {
+ ? ? u8 fb_delay;
+ ? ? void (*set_level)(int lvl);
+};
I think set_level should be called 'set_cs' to make it clearer what is
being done here.
Well, in the driver we instantiate the structure pointer as 'cs', so all
the calls look like "cs->set_level" so I think that should be ok,
as it's quite obvious its all about cs(ChipSelect).
quoted
quoted
+/**
+ * struct s3c64xx_spi_cntrlr_info - SPI Controller defining structure
+ * @src_clk_nr: Clock source index for the CLK_CFG[SPI_CLKSEL] field.
+ * @src_clk_name: Platform name of the corresponding clock.
+ * @src_clk: Pointer to the source clock.
+ * @num_cs: Number of CS this controller emulates.
+ * @cs: Array describing each CS.
+ * @cfg_gpio: Configure pins for this SPI controller.
+ * @fifo_lvl_mask: All tx fifo_lvl fields start at offset-6
+ * @rx_lvl_offset: Depends on tx fifo_lvl field and bus number
+ * @high_speed: If the controller supports HIGH_SPEED_EN bit
+ */
+struct s3c64xx_spi_cntrlr_info {
how about not bothering with the _cntrlr_ here and just call it
s3c64xx_spi_info instead?
Sure.
quoted
quoted
+ ? ? int src_clk_nr;
+ ? ? char *src_clk_name;
+ ? ? struct clk *src_clk;
do not pass 'struct clk *' in via platform data.
Since this is not initialized in platform code: just a pointer
made available to the driver. So, yes, this can be made a
member of s3c64xx_spi_driver_data rather.
quoted
quoted
+ ? ? int num_cs;
+ ? ? struct s3c64xx_spi_csinfo *cs;
+
+ ? ? int (*cfg_gpio)(struct platform_device *pdev);
+
+ ? ? /* Following two fields are for future compatibility */
+ ? ? int fifo_lvl_mask;
+ ? ? int rx_lvl_offset;
+ ? ? int high_speed;
+};
I was wondering if a single 'set_cs' callback here would be in order,
given each spi device can already hold a chip-select number for use
with such callbacks, so:

void (*set_cs)(struct s3c64xx_spi_cntrlr_info *us, struct spi_device *sel, int to);
In that case the machine code wud have to map the chipselect number to
appropriate function/switch-case. Switch-case maybe ok, but calling some
function to toggle CS might result in bigger lags between CS and appearance
of clock on the bus.
The point is that we should already have a pointer to the spi device
being initialised, and this can have a machine-set field in it specifying
the chipselect. If it is all gpio, then this simply could be the
number of the gpio involved. 

I don't see that this is going to save a lot of code time, wheras it is
adding to the complexity of the platform data.
 
quoted
quoted
+/**
+ * s3c64xx_spi_set_info - SPI Controller configure callback by the board
+ * ? ? ? ? ? ? ? ? ? ? ? ? ? initialization code.
+ * @cntrlr: SPI controller number the configuration is for.
+ * @src_clk_nr: Clock the SPI controller is to use to generate SPI clocks.
+ * @cs: Pointer to the array of CS descriptions.
+ * @num_cs: Number of elements in the 'cs' array.
+ */
+extern void s3c64xx_spi_set_info(int cntrlr, int src_clk_nr, int num_cs);
+
+#endif /* __S3C64XX_PLAT_SPI_H */
--
1.6.2.5


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
--
--
Ben

Q: ? ? ?What's a light-year?
A: ? ? ?One-third less calories than a regular year.


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
-- 
-- 
Ben

Q:      What's a light-year?
A:      One-third less calories than a regular year.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help