1 /* SPDX-License-Identifier: GPL-2.0 */
2 
3 /*
4  * Copyright (C) 2009 Samsung Electronics Ltd.
5  *	Jaswinder Singh <jassi.brar@samsung.com>
6  */
7 
8 #ifndef __SPI_S3C64XX_H
9 #define __SPI_S3C64XX_H
10 
11 #include <linux/dmaengine.h>
12 
13 struct platform_device;
14 
15 /**
16  * struct s3c64xx_spi_csinfo - ChipSelect description
17  * @fb_delay: Slave specific feedback delay.
18  *            Refer to FB_CLK_SEL register definition in SPI chapter.
19  * @line: Custom 'identity' of the CS line.
20  *
21  * This is per SPI-Slave Chipselect information.
22  * Allocate and initialize one in machine init code and make the
23  * spi_board_info.controller_data point to it.
24  */
25 struct s3c64xx_spi_csinfo {
26 	u8 fb_delay;
27 	unsigned line;
28 };
29 
30 /**
31  * struct s3c64xx_spi_info - SPI Controller defining structure
32  * @src_clk_nr: Clock source index for the CLK_CFG[SPI_CLKSEL] field.
33  * @num_cs: Number of CS this controller emulates.
34  * @cfg_gpio: Configure pins for this SPI controller.
35  */
36 struct s3c64xx_spi_info {
37 	int src_clk_nr;
38 	int num_cs;
39 	bool no_cs;
40 	int (*cfg_gpio)(void);
41 };
42 
43 /**
44  * s3c64xx_spi_set_platdata - SPI Controller configure callback by the board
45  *				initialization code.
46  * @cfg_gpio: Pointer to gpio setup function.
47  * @src_clk_nr: Clock the SPI controller is to use to generate SPI clocks.
48  * @num_cs: Number of elements in the 'cs' array.
49  *
50  * Call this from machine init code for each SPI Controller that
51  * has some chips attached to it.
52  */
53 extern void s3c64xx_spi0_set_platdata(int (*cfg_gpio)(void), int src_clk_nr,
54 						int num_cs);
55 extern void s3c64xx_spi1_set_platdata(int (*cfg_gpio)(void), int src_clk_nr,
56 						int num_cs);
57 extern void s3c64xx_spi2_set_platdata(int (*cfg_gpio)(void), int src_clk_nr,
58 						int num_cs);
59 
60 /* defined by architecture to configure gpio */
61 extern int s3c64xx_spi0_cfg_gpio(void);
62 extern int s3c64xx_spi1_cfg_gpio(void);
63 extern int s3c64xx_spi2_cfg_gpio(void);
64 
65 extern struct s3c64xx_spi_info s3c64xx_spi0_pdata;
66 extern struct s3c64xx_spi_info s3c64xx_spi1_pdata;
67 extern struct s3c64xx_spi_info s3c64xx_spi2_pdata;
68 #endif /*__SPI_S3C64XX_H */
69