xref: /OK3568_Linux_fs/kernel/drivers/i2c/busses/i2c-stu300.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2007-2012 ST-Ericsson AB
4*4882a593Smuzhiyun  * ST DDC I2C master mode driver, used in e.g. U300 series platforms.
5*4882a593Smuzhiyun  * Author: Linus Walleij <linus.walleij@stericsson.com>
6*4882a593Smuzhiyun  * Author: Jonas Aaberg <jonas.aberg@stericsson.com>
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun #include <linux/init.h>
9*4882a593Smuzhiyun #include <linux/module.h>
10*4882a593Smuzhiyun #include <linux/platform_device.h>
11*4882a593Smuzhiyun #include <linux/delay.h>
12*4882a593Smuzhiyun #include <linux/i2c.h>
13*4882a593Smuzhiyun #include <linux/spinlock.h>
14*4882a593Smuzhiyun #include <linux/completion.h>
15*4882a593Smuzhiyun #include <linux/err.h>
16*4882a593Smuzhiyun #include <linux/interrupt.h>
17*4882a593Smuzhiyun #include <linux/clk.h>
18*4882a593Smuzhiyun #include <linux/io.h>
19*4882a593Smuzhiyun #include <linux/slab.h>
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /* the name of this kernel module */
22*4882a593Smuzhiyun #define NAME "stu300"
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun /* CR (Control Register) 8bit (R/W) */
25*4882a593Smuzhiyun #define I2C_CR					(0x00000000)
26*4882a593Smuzhiyun #define I2C_CR_RESET_VALUE			(0x00)
27*4882a593Smuzhiyun #define I2C_CR_RESET_UMASK			(0x00)
28*4882a593Smuzhiyun #define I2C_CR_DDC1_ENABLE			(0x80)
29*4882a593Smuzhiyun #define I2C_CR_TRANS_ENABLE			(0x40)
30*4882a593Smuzhiyun #define I2C_CR_PERIPHERAL_ENABLE		(0x20)
31*4882a593Smuzhiyun #define I2C_CR_DDC2B_ENABLE			(0x10)
32*4882a593Smuzhiyun #define I2C_CR_START_ENABLE			(0x08)
33*4882a593Smuzhiyun #define I2C_CR_ACK_ENABLE			(0x04)
34*4882a593Smuzhiyun #define I2C_CR_STOP_ENABLE			(0x02)
35*4882a593Smuzhiyun #define I2C_CR_INTERRUPT_ENABLE			(0x01)
36*4882a593Smuzhiyun /* SR1 (Status Register 1) 8bit (R/-) */
37*4882a593Smuzhiyun #define I2C_SR1					(0x00000004)
38*4882a593Smuzhiyun #define I2C_SR1_RESET_VALUE			(0x00)
39*4882a593Smuzhiyun #define I2C_SR1_RESET_UMASK			(0x00)
40*4882a593Smuzhiyun #define I2C_SR1_EVF_IND				(0x80)
41*4882a593Smuzhiyun #define I2C_SR1_ADD10_IND			(0x40)
42*4882a593Smuzhiyun #define I2C_SR1_TRA_IND				(0x20)
43*4882a593Smuzhiyun #define I2C_SR1_BUSY_IND			(0x10)
44*4882a593Smuzhiyun #define I2C_SR1_BTF_IND				(0x08)
45*4882a593Smuzhiyun #define I2C_SR1_ADSL_IND			(0x04)
46*4882a593Smuzhiyun #define I2C_SR1_MSL_IND				(0x02)
47*4882a593Smuzhiyun #define I2C_SR1_SB_IND				(0x01)
48*4882a593Smuzhiyun /* SR2 (Status Register 2) 8bit (R/-) */
49*4882a593Smuzhiyun #define I2C_SR2					(0x00000008)
50*4882a593Smuzhiyun #define I2C_SR2_RESET_VALUE			(0x00)
51*4882a593Smuzhiyun #define I2C_SR2_RESET_UMASK			(0x40)
52*4882a593Smuzhiyun #define I2C_SR2_MASK				(0xBF)
53*4882a593Smuzhiyun #define I2C_SR2_SCLFAL_IND			(0x80)
54*4882a593Smuzhiyun #define I2C_SR2_ENDAD_IND			(0x20)
55*4882a593Smuzhiyun #define I2C_SR2_AF_IND				(0x10)
56*4882a593Smuzhiyun #define I2C_SR2_STOPF_IND			(0x08)
57*4882a593Smuzhiyun #define I2C_SR2_ARLO_IND			(0x04)
58*4882a593Smuzhiyun #define I2C_SR2_BERR_IND			(0x02)
59*4882a593Smuzhiyun #define I2C_SR2_DDC2BF_IND			(0x01)
60*4882a593Smuzhiyun /* CCR (Clock Control Register) 8bit (R/W) */
61*4882a593Smuzhiyun #define I2C_CCR					(0x0000000C)
62*4882a593Smuzhiyun #define I2C_CCR_RESET_VALUE			(0x00)
63*4882a593Smuzhiyun #define I2C_CCR_RESET_UMASK			(0x00)
64*4882a593Smuzhiyun #define I2C_CCR_MASK				(0xFF)
65*4882a593Smuzhiyun #define I2C_CCR_FMSM				(0x80)
66*4882a593Smuzhiyun #define I2C_CCR_CC_MASK				(0x7F)
67*4882a593Smuzhiyun /* OAR1 (Own Address Register 1) 8bit (R/W) */
68*4882a593Smuzhiyun #define I2C_OAR1				(0x00000010)
69*4882a593Smuzhiyun #define I2C_OAR1_RESET_VALUE			(0x00)
70*4882a593Smuzhiyun #define I2C_OAR1_RESET_UMASK			(0x00)
71*4882a593Smuzhiyun #define I2C_OAR1_ADD_MASK			(0xFF)
72*4882a593Smuzhiyun /* OAR2 (Own Address Register 2) 8bit (R/W) */
73*4882a593Smuzhiyun #define I2C_OAR2				(0x00000014)
74*4882a593Smuzhiyun #define I2C_OAR2_RESET_VALUE			(0x40)
75*4882a593Smuzhiyun #define I2C_OAR2_RESET_UMASK			(0x19)
76*4882a593Smuzhiyun #define I2C_OAR2_MASK				(0xE6)
77*4882a593Smuzhiyun #define I2C_OAR2_FR_25_10MHZ			(0x00)
78*4882a593Smuzhiyun #define I2C_OAR2_FR_10_1667MHZ			(0x20)
79*4882a593Smuzhiyun #define I2C_OAR2_FR_1667_2667MHZ		(0x40)
80*4882a593Smuzhiyun #define I2C_OAR2_FR_2667_40MHZ			(0x60)
81*4882a593Smuzhiyun #define I2C_OAR2_FR_40_5333MHZ			(0x80)
82*4882a593Smuzhiyun #define I2C_OAR2_FR_5333_66MHZ			(0xA0)
83*4882a593Smuzhiyun #define I2C_OAR2_FR_66_80MHZ			(0xC0)
84*4882a593Smuzhiyun #define I2C_OAR2_FR_80_100MHZ			(0xE0)
85*4882a593Smuzhiyun #define I2C_OAR2_FR_MASK			(0xE0)
86*4882a593Smuzhiyun #define I2C_OAR2_ADD_MASK			(0x06)
87*4882a593Smuzhiyun /* DR (Data Register) 8bit (R/W) */
88*4882a593Smuzhiyun #define I2C_DR					(0x00000018)
89*4882a593Smuzhiyun #define I2C_DR_RESET_VALUE			(0x00)
90*4882a593Smuzhiyun #define I2C_DR_RESET_UMASK			(0xFF)
91*4882a593Smuzhiyun #define I2C_DR_D_MASK				(0xFF)
92*4882a593Smuzhiyun /* ECCR (Extended Clock Control Register) 8bit (R/W) */
93*4882a593Smuzhiyun #define I2C_ECCR				(0x0000001C)
94*4882a593Smuzhiyun #define I2C_ECCR_RESET_VALUE			(0x00)
95*4882a593Smuzhiyun #define I2C_ECCR_RESET_UMASK			(0xE0)
96*4882a593Smuzhiyun #define I2C_ECCR_MASK				(0x1F)
97*4882a593Smuzhiyun #define I2C_ECCR_CC_MASK			(0x1F)
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun /*
100*4882a593Smuzhiyun  * These events are more or less responses to commands
101*4882a593Smuzhiyun  * sent into the hardware, presumably reflecting the state
102*4882a593Smuzhiyun  * of an internal state machine.
103*4882a593Smuzhiyun  */
104*4882a593Smuzhiyun enum stu300_event {
105*4882a593Smuzhiyun 	STU300_EVENT_NONE = 0,
106*4882a593Smuzhiyun 	STU300_EVENT_1,
107*4882a593Smuzhiyun 	STU300_EVENT_2,
108*4882a593Smuzhiyun 	STU300_EVENT_3,
109*4882a593Smuzhiyun 	STU300_EVENT_4,
110*4882a593Smuzhiyun 	STU300_EVENT_5,
111*4882a593Smuzhiyun 	STU300_EVENT_6,
112*4882a593Smuzhiyun 	STU300_EVENT_7,
113*4882a593Smuzhiyun 	STU300_EVENT_8,
114*4882a593Smuzhiyun 	STU300_EVENT_9
115*4882a593Smuzhiyun };
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun enum stu300_error {
118*4882a593Smuzhiyun 	STU300_ERROR_NONE = 0,
119*4882a593Smuzhiyun 	STU300_ERROR_ACKNOWLEDGE_FAILURE,
120*4882a593Smuzhiyun 	STU300_ERROR_BUS_ERROR,
121*4882a593Smuzhiyun 	STU300_ERROR_ARBITRATION_LOST,
122*4882a593Smuzhiyun 	STU300_ERROR_UNKNOWN
123*4882a593Smuzhiyun };
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /* timeout waiting for the controller to respond */
126*4882a593Smuzhiyun #define STU300_TIMEOUT (msecs_to_jiffies(1000))
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /*
129*4882a593Smuzhiyun  * The number of address send athemps tried before giving up.
130*4882a593Smuzhiyun  * If the first one fails it seems like 5 to 8 attempts are required.
131*4882a593Smuzhiyun  */
132*4882a593Smuzhiyun #define NUM_ADDR_RESEND_ATTEMPTS 12
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun /* I2C clock speed, in Hz 0-400kHz*/
135*4882a593Smuzhiyun static unsigned int scl_frequency = I2C_MAX_STANDARD_MODE_FREQ;
136*4882a593Smuzhiyun module_param(scl_frequency, uint,  0644);
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun /**
139*4882a593Smuzhiyun  * struct stu300_dev - the stu300 driver state holder
140*4882a593Smuzhiyun  * @pdev: parent platform device
141*4882a593Smuzhiyun  * @adapter: corresponding I2C adapter
142*4882a593Smuzhiyun  * @clk: hardware block clock
143*4882a593Smuzhiyun  * @irq: assigned interrupt line
144*4882a593Smuzhiyun  * @cmd_issue_lock: this locks the following cmd_ variables
145*4882a593Smuzhiyun  * @cmd_complete: acknowledge completion for an I2C command
146*4882a593Smuzhiyun  * @cmd_event: expected event coming in as a response to a command
147*4882a593Smuzhiyun  * @cmd_err: error code as response to a command
148*4882a593Smuzhiyun  * @speed: current bus speed in Hz
149*4882a593Smuzhiyun  * @msg_index: index of current message
150*4882a593Smuzhiyun  * @msg_len: length of current message
151*4882a593Smuzhiyun  */
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun struct stu300_dev {
154*4882a593Smuzhiyun 	struct platform_device	*pdev;
155*4882a593Smuzhiyun 	struct i2c_adapter	adapter;
156*4882a593Smuzhiyun 	void __iomem		*virtbase;
157*4882a593Smuzhiyun 	struct clk		*clk;
158*4882a593Smuzhiyun 	int			irq;
159*4882a593Smuzhiyun 	spinlock_t		cmd_issue_lock;
160*4882a593Smuzhiyun 	struct completion	cmd_complete;
161*4882a593Smuzhiyun 	enum stu300_event	cmd_event;
162*4882a593Smuzhiyun 	enum stu300_error	cmd_err;
163*4882a593Smuzhiyun 	unsigned int		speed;
164*4882a593Smuzhiyun 	int			msg_index;
165*4882a593Smuzhiyun 	int			msg_len;
166*4882a593Smuzhiyun };
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun /* Local forward function declarations */
169*4882a593Smuzhiyun static int stu300_init_hw(struct stu300_dev *dev);
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun /*
172*4882a593Smuzhiyun  * The block needs writes in both MSW and LSW in order
173*4882a593Smuzhiyun  * for all data lines to reach their destination.
174*4882a593Smuzhiyun  */
stu300_wr8(u32 value,void __iomem * address)175*4882a593Smuzhiyun static inline void stu300_wr8(u32 value, void __iomem *address)
176*4882a593Smuzhiyun {
177*4882a593Smuzhiyun 	writel((value << 16) | value, address);
178*4882a593Smuzhiyun }
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /*
181*4882a593Smuzhiyun  * This merely masks off the duplicates which appear
182*4882a593Smuzhiyun  * in bytes 1-3. You _MUST_ use 32-bit bus access on this
183*4882a593Smuzhiyun  * device, else it will not work.
184*4882a593Smuzhiyun  */
stu300_r8(void __iomem * address)185*4882a593Smuzhiyun static inline u32 stu300_r8(void __iomem *address)
186*4882a593Smuzhiyun {
187*4882a593Smuzhiyun 	return readl(address) & 0x000000FFU;
188*4882a593Smuzhiyun }
189*4882a593Smuzhiyun 
stu300_irq_enable(struct stu300_dev * dev)190*4882a593Smuzhiyun static void stu300_irq_enable(struct stu300_dev *dev)
191*4882a593Smuzhiyun {
192*4882a593Smuzhiyun 	u32 val;
193*4882a593Smuzhiyun 	val = stu300_r8(dev->virtbase + I2C_CR);
194*4882a593Smuzhiyun 	val |= I2C_CR_INTERRUPT_ENABLE;
195*4882a593Smuzhiyun 	/* Twice paranoia (possible HW glitch) */
196*4882a593Smuzhiyun 	stu300_wr8(val, dev->virtbase + I2C_CR);
197*4882a593Smuzhiyun 	stu300_wr8(val, dev->virtbase + I2C_CR);
198*4882a593Smuzhiyun }
199*4882a593Smuzhiyun 
stu300_irq_disable(struct stu300_dev * dev)200*4882a593Smuzhiyun static void stu300_irq_disable(struct stu300_dev *dev)
201*4882a593Smuzhiyun {
202*4882a593Smuzhiyun 	u32 val;
203*4882a593Smuzhiyun 	val = stu300_r8(dev->virtbase + I2C_CR);
204*4882a593Smuzhiyun 	val &= ~I2C_CR_INTERRUPT_ENABLE;
205*4882a593Smuzhiyun 	/* Twice paranoia (possible HW glitch) */
206*4882a593Smuzhiyun 	stu300_wr8(val, dev->virtbase + I2C_CR);
207*4882a593Smuzhiyun 	stu300_wr8(val, dev->virtbase + I2C_CR);
208*4882a593Smuzhiyun }
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun /*
212*4882a593Smuzhiyun  * Tells whether a certain event or events occurred in
213*4882a593Smuzhiyun  * response to a command. The events represent states in
214*4882a593Smuzhiyun  * the internal state machine of the hardware. The events
215*4882a593Smuzhiyun  * are not very well described in the hardware
216*4882a593Smuzhiyun  * documentation and can only be treated as abstract state
217*4882a593Smuzhiyun  * machine states.
218*4882a593Smuzhiyun  *
219*4882a593Smuzhiyun  * @ret 0 = event has not occurred or unknown error, any
220*4882a593Smuzhiyun  * other value means the correct event occurred or an error.
221*4882a593Smuzhiyun  */
222*4882a593Smuzhiyun 
stu300_event_occurred(struct stu300_dev * dev,enum stu300_event mr_event)223*4882a593Smuzhiyun static int stu300_event_occurred(struct stu300_dev *dev,
224*4882a593Smuzhiyun 				   enum stu300_event mr_event) {
225*4882a593Smuzhiyun 	u32 status1;
226*4882a593Smuzhiyun 	u32 status2;
227*4882a593Smuzhiyun 
228*4882a593Smuzhiyun 	/* What event happened? */
229*4882a593Smuzhiyun 	status1 = stu300_r8(dev->virtbase + I2C_SR1);
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun 	if (!(status1 & I2C_SR1_EVF_IND))
232*4882a593Smuzhiyun 		/* No event at all */
233*4882a593Smuzhiyun 		return 0;
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun 	status2 = stu300_r8(dev->virtbase + I2C_SR2);
236*4882a593Smuzhiyun 
237*4882a593Smuzhiyun 	/* Block any multiple interrupts */
238*4882a593Smuzhiyun 	stu300_irq_disable(dev);
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun 	/* Check for errors first */
241*4882a593Smuzhiyun 	if (status2 & I2C_SR2_AF_IND) {
242*4882a593Smuzhiyun 		dev->cmd_err = STU300_ERROR_ACKNOWLEDGE_FAILURE;
243*4882a593Smuzhiyun 		return 1;
244*4882a593Smuzhiyun 	} else if (status2 & I2C_SR2_BERR_IND) {
245*4882a593Smuzhiyun 		dev->cmd_err = STU300_ERROR_BUS_ERROR;
246*4882a593Smuzhiyun 		return 1;
247*4882a593Smuzhiyun 	} else if (status2 & I2C_SR2_ARLO_IND) {
248*4882a593Smuzhiyun 		dev->cmd_err = STU300_ERROR_ARBITRATION_LOST;
249*4882a593Smuzhiyun 		return 1;
250*4882a593Smuzhiyun 	}
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun 	switch (mr_event) {
253*4882a593Smuzhiyun 	case STU300_EVENT_1:
254*4882a593Smuzhiyun 		if (status1 & I2C_SR1_ADSL_IND)
255*4882a593Smuzhiyun 			return 1;
256*4882a593Smuzhiyun 		break;
257*4882a593Smuzhiyun 	case STU300_EVENT_2:
258*4882a593Smuzhiyun 	case STU300_EVENT_3:
259*4882a593Smuzhiyun 	case STU300_EVENT_7:
260*4882a593Smuzhiyun 	case STU300_EVENT_8:
261*4882a593Smuzhiyun 		if (status1 & I2C_SR1_BTF_IND) {
262*4882a593Smuzhiyun 			return 1;
263*4882a593Smuzhiyun 		}
264*4882a593Smuzhiyun 		break;
265*4882a593Smuzhiyun 	case STU300_EVENT_4:
266*4882a593Smuzhiyun 		if (status2 & I2C_SR2_STOPF_IND)
267*4882a593Smuzhiyun 			return 1;
268*4882a593Smuzhiyun 		break;
269*4882a593Smuzhiyun 	case STU300_EVENT_5:
270*4882a593Smuzhiyun 		if (status1 & I2C_SR1_SB_IND)
271*4882a593Smuzhiyun 			/* Clear start bit */
272*4882a593Smuzhiyun 			return 1;
273*4882a593Smuzhiyun 		break;
274*4882a593Smuzhiyun 	case STU300_EVENT_6:
275*4882a593Smuzhiyun 		if (status2 & I2C_SR2_ENDAD_IND) {
276*4882a593Smuzhiyun 			/* First check for any errors */
277*4882a593Smuzhiyun 			return 1;
278*4882a593Smuzhiyun 		}
279*4882a593Smuzhiyun 		break;
280*4882a593Smuzhiyun 	case STU300_EVENT_9:
281*4882a593Smuzhiyun 		if (status1 & I2C_SR1_ADD10_IND)
282*4882a593Smuzhiyun 			return 1;
283*4882a593Smuzhiyun 		break;
284*4882a593Smuzhiyun 	default:
285*4882a593Smuzhiyun 		break;
286*4882a593Smuzhiyun 	}
287*4882a593Smuzhiyun 	/* If we get here, we're on thin ice.
288*4882a593Smuzhiyun 	 * Here we are in a status where we have
289*4882a593Smuzhiyun 	 * gotten a response that does not match
290*4882a593Smuzhiyun 	 * what we requested.
291*4882a593Smuzhiyun 	 */
292*4882a593Smuzhiyun 	dev->cmd_err = STU300_ERROR_UNKNOWN;
293*4882a593Smuzhiyun 	dev_err(&dev->pdev->dev,
294*4882a593Smuzhiyun 		"Unhandled interrupt! %d sr1: 0x%x sr2: 0x%x\n",
295*4882a593Smuzhiyun 		mr_event, status1, status2);
296*4882a593Smuzhiyun 	return 0;
297*4882a593Smuzhiyun }
298*4882a593Smuzhiyun 
stu300_irh(int irq,void * data)299*4882a593Smuzhiyun static irqreturn_t stu300_irh(int irq, void *data)
300*4882a593Smuzhiyun {
301*4882a593Smuzhiyun 	struct stu300_dev *dev = data;
302*4882a593Smuzhiyun 	int res;
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun 	/* Just make sure that the block is clocked */
305*4882a593Smuzhiyun 	clk_enable(dev->clk);
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun 	/* See if this was what we were waiting for */
308*4882a593Smuzhiyun 	spin_lock(&dev->cmd_issue_lock);
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun 	res = stu300_event_occurred(dev, dev->cmd_event);
311*4882a593Smuzhiyun 	if (res || dev->cmd_err != STU300_ERROR_NONE)
312*4882a593Smuzhiyun 		complete(&dev->cmd_complete);
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun 	spin_unlock(&dev->cmd_issue_lock);
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun 	clk_disable(dev->clk);
317*4882a593Smuzhiyun 
318*4882a593Smuzhiyun 	return IRQ_HANDLED;
319*4882a593Smuzhiyun }
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun /*
322*4882a593Smuzhiyun  * Sends a command and then waits for the bits masked by *flagmask*
323*4882a593Smuzhiyun  * to go high or low by IRQ awaiting.
324*4882a593Smuzhiyun  */
stu300_start_and_await_event(struct stu300_dev * dev,u8 cr_value,enum stu300_event mr_event)325*4882a593Smuzhiyun static int stu300_start_and_await_event(struct stu300_dev *dev,
326*4882a593Smuzhiyun 					  u8 cr_value,
327*4882a593Smuzhiyun 					  enum stu300_event mr_event)
328*4882a593Smuzhiyun {
329*4882a593Smuzhiyun 	int ret;
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun 	/* Lock command issue, fill in an event we wait for */
332*4882a593Smuzhiyun 	spin_lock_irq(&dev->cmd_issue_lock);
333*4882a593Smuzhiyun 	init_completion(&dev->cmd_complete);
334*4882a593Smuzhiyun 	dev->cmd_err = STU300_ERROR_NONE;
335*4882a593Smuzhiyun 	dev->cmd_event = mr_event;
336*4882a593Smuzhiyun 	spin_unlock_irq(&dev->cmd_issue_lock);
337*4882a593Smuzhiyun 
338*4882a593Smuzhiyun 	/* Turn on interrupt, send command and wait. */
339*4882a593Smuzhiyun 	cr_value |= I2C_CR_INTERRUPT_ENABLE;
340*4882a593Smuzhiyun 	stu300_wr8(cr_value, dev->virtbase + I2C_CR);
341*4882a593Smuzhiyun 	ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete,
342*4882a593Smuzhiyun 							STU300_TIMEOUT);
343*4882a593Smuzhiyun 	if (ret < 0) {
344*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev,
345*4882a593Smuzhiyun 		       "wait_for_completion_interruptible_timeout() "
346*4882a593Smuzhiyun 		       "returned %d waiting for event %04x\n", ret, mr_event);
347*4882a593Smuzhiyun 		return ret;
348*4882a593Smuzhiyun 	}
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun 	if (ret == 0) {
351*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev, "controller timed out "
352*4882a593Smuzhiyun 		       "waiting for event %d, reinit hardware\n", mr_event);
353*4882a593Smuzhiyun 		(void) stu300_init_hw(dev);
354*4882a593Smuzhiyun 		return -ETIMEDOUT;
355*4882a593Smuzhiyun 	}
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun 	if (dev->cmd_err != STU300_ERROR_NONE) {
358*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev, "controller (start) "
359*4882a593Smuzhiyun 		       "error %d waiting for event %d, reinit hardware\n",
360*4882a593Smuzhiyun 		       dev->cmd_err, mr_event);
361*4882a593Smuzhiyun 		(void) stu300_init_hw(dev);
362*4882a593Smuzhiyun 		return -EIO;
363*4882a593Smuzhiyun 	}
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun 	return 0;
366*4882a593Smuzhiyun }
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun /*
369*4882a593Smuzhiyun  * This waits for a flag to be set, if it is not set on entry, an interrupt is
370*4882a593Smuzhiyun  * configured to wait for the flag using a completion.
371*4882a593Smuzhiyun  */
stu300_await_event(struct stu300_dev * dev,enum stu300_event mr_event)372*4882a593Smuzhiyun static int stu300_await_event(struct stu300_dev *dev,
373*4882a593Smuzhiyun 				enum stu300_event mr_event)
374*4882a593Smuzhiyun {
375*4882a593Smuzhiyun 	int ret;
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun 	/* Is it already here? */
378*4882a593Smuzhiyun 	spin_lock_irq(&dev->cmd_issue_lock);
379*4882a593Smuzhiyun 	dev->cmd_err = STU300_ERROR_NONE;
380*4882a593Smuzhiyun 	dev->cmd_event = mr_event;
381*4882a593Smuzhiyun 
382*4882a593Smuzhiyun 	init_completion(&dev->cmd_complete);
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun 	/* Turn on the I2C interrupt for current operation */
385*4882a593Smuzhiyun 	stu300_irq_enable(dev);
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun 	/* Unlock the command block and wait for the event to occur */
388*4882a593Smuzhiyun 	spin_unlock_irq(&dev->cmd_issue_lock);
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun 	ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete,
391*4882a593Smuzhiyun 							STU300_TIMEOUT);
392*4882a593Smuzhiyun 	if (ret < 0) {
393*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev,
394*4882a593Smuzhiyun 		       "wait_for_completion_interruptible_timeout()"
395*4882a593Smuzhiyun 		       "returned %d waiting for event %04x\n", ret, mr_event);
396*4882a593Smuzhiyun 		return ret;
397*4882a593Smuzhiyun 	}
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun 	if (ret == 0) {
400*4882a593Smuzhiyun 		if (mr_event != STU300_EVENT_6) {
401*4882a593Smuzhiyun 			dev_err(&dev->pdev->dev, "controller "
402*4882a593Smuzhiyun 				"timed out waiting for event %d, reinit "
403*4882a593Smuzhiyun 				"hardware\n", mr_event);
404*4882a593Smuzhiyun 			(void) stu300_init_hw(dev);
405*4882a593Smuzhiyun 		}
406*4882a593Smuzhiyun 		return -ETIMEDOUT;
407*4882a593Smuzhiyun 	}
408*4882a593Smuzhiyun 
409*4882a593Smuzhiyun 	if (dev->cmd_err != STU300_ERROR_NONE) {
410*4882a593Smuzhiyun 		if (mr_event != STU300_EVENT_6) {
411*4882a593Smuzhiyun 			dev_err(&dev->pdev->dev, "controller "
412*4882a593Smuzhiyun 				"error (await_event) %d waiting for event %d, "
413*4882a593Smuzhiyun 			       "reinit hardware\n", dev->cmd_err, mr_event);
414*4882a593Smuzhiyun 			(void) stu300_init_hw(dev);
415*4882a593Smuzhiyun 		}
416*4882a593Smuzhiyun 		return -EIO;
417*4882a593Smuzhiyun 	}
418*4882a593Smuzhiyun 
419*4882a593Smuzhiyun 	return 0;
420*4882a593Smuzhiyun }
421*4882a593Smuzhiyun 
422*4882a593Smuzhiyun /*
423*4882a593Smuzhiyun  * Waits for the busy bit to go low by repeated polling.
424*4882a593Smuzhiyun  */
425*4882a593Smuzhiyun #define BUSY_RELEASE_ATTEMPTS 10
stu300_wait_while_busy(struct stu300_dev * dev)426*4882a593Smuzhiyun static int stu300_wait_while_busy(struct stu300_dev *dev)
427*4882a593Smuzhiyun {
428*4882a593Smuzhiyun 	unsigned long timeout;
429*4882a593Smuzhiyun 	int i;
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun 	for (i = 0; i < BUSY_RELEASE_ATTEMPTS; i++) {
432*4882a593Smuzhiyun 		timeout = jiffies + STU300_TIMEOUT;
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun 		while (!time_after(jiffies, timeout)) {
435*4882a593Smuzhiyun 			/* Is not busy? */
436*4882a593Smuzhiyun 			if ((stu300_r8(dev->virtbase + I2C_SR1) &
437*4882a593Smuzhiyun 			     I2C_SR1_BUSY_IND) == 0)
438*4882a593Smuzhiyun 				return 0;
439*4882a593Smuzhiyun 			msleep(1);
440*4882a593Smuzhiyun 		}
441*4882a593Smuzhiyun 
442*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev, "transaction timed out "
443*4882a593Smuzhiyun 			"waiting for device to be free (not busy). "
444*4882a593Smuzhiyun 		       "Attempt: %d\n", i+1);
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev, "base address = "
447*4882a593Smuzhiyun 			"0x%p, reinit hardware\n", dev->virtbase);
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun 		(void) stu300_init_hw(dev);
450*4882a593Smuzhiyun 	}
451*4882a593Smuzhiyun 
452*4882a593Smuzhiyun 	dev_err(&dev->pdev->dev, "giving up after %d attempts "
453*4882a593Smuzhiyun 		"to reset the bus.\n",  BUSY_RELEASE_ATTEMPTS);
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun 	return -ETIMEDOUT;
456*4882a593Smuzhiyun }
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun struct stu300_clkset {
459*4882a593Smuzhiyun 	unsigned long rate;
460*4882a593Smuzhiyun 	u32 setting;
461*4882a593Smuzhiyun };
462*4882a593Smuzhiyun 
463*4882a593Smuzhiyun static const struct stu300_clkset stu300_clktable[] = {
464*4882a593Smuzhiyun 	{ 0,         0xFFU },
465*4882a593Smuzhiyun 	{ 2500000,   I2C_OAR2_FR_25_10MHZ },
466*4882a593Smuzhiyun 	{ 10000000,  I2C_OAR2_FR_10_1667MHZ },
467*4882a593Smuzhiyun 	{ 16670000,  I2C_OAR2_FR_1667_2667MHZ },
468*4882a593Smuzhiyun 	{ 26670000,  I2C_OAR2_FR_2667_40MHZ },
469*4882a593Smuzhiyun 	{ 40000000,  I2C_OAR2_FR_40_5333MHZ },
470*4882a593Smuzhiyun 	{ 53330000,  I2C_OAR2_FR_5333_66MHZ },
471*4882a593Smuzhiyun 	{ 66000000,  I2C_OAR2_FR_66_80MHZ },
472*4882a593Smuzhiyun 	{ 80000000,  I2C_OAR2_FR_80_100MHZ },
473*4882a593Smuzhiyun 	{ 100000000, 0xFFU },
474*4882a593Smuzhiyun };
475*4882a593Smuzhiyun 
476*4882a593Smuzhiyun 
stu300_set_clk(struct stu300_dev * dev,unsigned long clkrate)477*4882a593Smuzhiyun static int stu300_set_clk(struct stu300_dev *dev, unsigned long clkrate)
478*4882a593Smuzhiyun {
479*4882a593Smuzhiyun 
480*4882a593Smuzhiyun 	u32 val;
481*4882a593Smuzhiyun 	int i = 0;
482*4882a593Smuzhiyun 
483*4882a593Smuzhiyun 	/* Locate the appropriate clock setting */
484*4882a593Smuzhiyun 	while (i < ARRAY_SIZE(stu300_clktable) - 1 &&
485*4882a593Smuzhiyun 	       stu300_clktable[i].rate < clkrate)
486*4882a593Smuzhiyun 		i++;
487*4882a593Smuzhiyun 
488*4882a593Smuzhiyun 	if (stu300_clktable[i].setting == 0xFFU) {
489*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev, "too %s clock rate requested "
490*4882a593Smuzhiyun 			"(%lu Hz).\n", i ? "high" : "low", clkrate);
491*4882a593Smuzhiyun 		return -EINVAL;
492*4882a593Smuzhiyun 	}
493*4882a593Smuzhiyun 
494*4882a593Smuzhiyun 	stu300_wr8(stu300_clktable[i].setting,
495*4882a593Smuzhiyun 		   dev->virtbase + I2C_OAR2);
496*4882a593Smuzhiyun 
497*4882a593Smuzhiyun 	dev_dbg(&dev->pdev->dev, "Clock rate %lu Hz, I2C bus speed %d Hz "
498*4882a593Smuzhiyun 		"virtbase %p\n", clkrate, dev->speed, dev->virtbase);
499*4882a593Smuzhiyun 
500*4882a593Smuzhiyun 	if (dev->speed > I2C_MAX_STANDARD_MODE_FREQ)
501*4882a593Smuzhiyun 		/* Fast Mode I2C */
502*4882a593Smuzhiyun 		val = ((clkrate/dev->speed) - 9)/3 + 1;
503*4882a593Smuzhiyun 	else
504*4882a593Smuzhiyun 		/* Standard Mode I2C */
505*4882a593Smuzhiyun 		val = ((clkrate/dev->speed) - 7)/2 + 1;
506*4882a593Smuzhiyun 
507*4882a593Smuzhiyun 	/* According to spec the divider must be > 2 */
508*4882a593Smuzhiyun 	if (val < 0x002) {
509*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev, "too low clock rate (%lu Hz).\n",
510*4882a593Smuzhiyun 			clkrate);
511*4882a593Smuzhiyun 		return -EINVAL;
512*4882a593Smuzhiyun 	}
513*4882a593Smuzhiyun 
514*4882a593Smuzhiyun 	/* We have 12 bits clock divider only! */
515*4882a593Smuzhiyun 	if (val & 0xFFFFF000U) {
516*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev, "too high clock rate (%lu Hz).\n",
517*4882a593Smuzhiyun 			clkrate);
518*4882a593Smuzhiyun 		return -EINVAL;
519*4882a593Smuzhiyun 	}
520*4882a593Smuzhiyun 
521*4882a593Smuzhiyun 	if (dev->speed > I2C_MAX_STANDARD_MODE_FREQ) {
522*4882a593Smuzhiyun 		/* CC6..CC0 */
523*4882a593Smuzhiyun 		stu300_wr8((val & I2C_CCR_CC_MASK) | I2C_CCR_FMSM,
524*4882a593Smuzhiyun 			   dev->virtbase + I2C_CCR);
525*4882a593Smuzhiyun 		dev_dbg(&dev->pdev->dev, "set clock divider to 0x%08x, "
526*4882a593Smuzhiyun 			"Fast Mode I2C\n", val);
527*4882a593Smuzhiyun 	} else {
528*4882a593Smuzhiyun 		/* CC6..CC0 */
529*4882a593Smuzhiyun 		stu300_wr8((val & I2C_CCR_CC_MASK),
530*4882a593Smuzhiyun 			   dev->virtbase + I2C_CCR);
531*4882a593Smuzhiyun 		dev_dbg(&dev->pdev->dev, "set clock divider to "
532*4882a593Smuzhiyun 			"0x%08x, Standard Mode I2C\n", val);
533*4882a593Smuzhiyun 	}
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun 	/* CC11..CC7 */
536*4882a593Smuzhiyun 	stu300_wr8(((val >> 7) & 0x1F),
537*4882a593Smuzhiyun 		   dev->virtbase + I2C_ECCR);
538*4882a593Smuzhiyun 
539*4882a593Smuzhiyun 	return 0;
540*4882a593Smuzhiyun }
541*4882a593Smuzhiyun 
542*4882a593Smuzhiyun 
stu300_init_hw(struct stu300_dev * dev)543*4882a593Smuzhiyun static int stu300_init_hw(struct stu300_dev *dev)
544*4882a593Smuzhiyun {
545*4882a593Smuzhiyun 	u32 dummy;
546*4882a593Smuzhiyun 	unsigned long clkrate;
547*4882a593Smuzhiyun 	int ret;
548*4882a593Smuzhiyun 
549*4882a593Smuzhiyun 	/* Disable controller */
550*4882a593Smuzhiyun 	stu300_wr8(0x00, dev->virtbase + I2C_CR);
551*4882a593Smuzhiyun 	/*
552*4882a593Smuzhiyun 	 * Set own address to some default value (0x00).
553*4882a593Smuzhiyun 	 * We do not support slave mode anyway.
554*4882a593Smuzhiyun 	 */
555*4882a593Smuzhiyun 	stu300_wr8(0x00, dev->virtbase + I2C_OAR1);
556*4882a593Smuzhiyun 	/*
557*4882a593Smuzhiyun 	 * The I2C controller only operates properly in 26 MHz but we
558*4882a593Smuzhiyun 	 * program this driver as if we didn't know. This will also set the two
559*4882a593Smuzhiyun 	 * high bits of the own address to zero as well.
560*4882a593Smuzhiyun 	 * There is no known hardware issue with running in 13 MHz
561*4882a593Smuzhiyun 	 * However, speeds over 200 kHz are not used.
562*4882a593Smuzhiyun 	 */
563*4882a593Smuzhiyun 	clkrate = clk_get_rate(dev->clk);
564*4882a593Smuzhiyun 	ret = stu300_set_clk(dev, clkrate);
565*4882a593Smuzhiyun 
566*4882a593Smuzhiyun 	if (ret)
567*4882a593Smuzhiyun 		return ret;
568*4882a593Smuzhiyun 	/*
569*4882a593Smuzhiyun 	 * Enable block, do it TWICE (hardware glitch)
570*4882a593Smuzhiyun 	 * Setting bit 7 can enable DDC mode. (Not used currently.)
571*4882a593Smuzhiyun 	 */
572*4882a593Smuzhiyun 	stu300_wr8(I2C_CR_PERIPHERAL_ENABLE,
573*4882a593Smuzhiyun 				  dev->virtbase + I2C_CR);
574*4882a593Smuzhiyun 	stu300_wr8(I2C_CR_PERIPHERAL_ENABLE,
575*4882a593Smuzhiyun 				  dev->virtbase + I2C_CR);
576*4882a593Smuzhiyun 	/* Make a dummy read of the status register SR1 & SR2 */
577*4882a593Smuzhiyun 	dummy = stu300_r8(dev->virtbase + I2C_SR2);
578*4882a593Smuzhiyun 	dummy = stu300_r8(dev->virtbase + I2C_SR1);
579*4882a593Smuzhiyun 
580*4882a593Smuzhiyun 	return 0;
581*4882a593Smuzhiyun }
582*4882a593Smuzhiyun 
583*4882a593Smuzhiyun 
584*4882a593Smuzhiyun 
585*4882a593Smuzhiyun /* Send slave address. */
stu300_send_address(struct stu300_dev * dev,struct i2c_msg * msg,int resend)586*4882a593Smuzhiyun static int stu300_send_address(struct stu300_dev *dev,
587*4882a593Smuzhiyun 				 struct i2c_msg *msg, int resend)
588*4882a593Smuzhiyun {
589*4882a593Smuzhiyun 	u32 val;
590*4882a593Smuzhiyun 	int ret;
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun 	if (msg->flags & I2C_M_TEN) {
593*4882a593Smuzhiyun 		/* This is probably how 10 bit addresses look */
594*4882a593Smuzhiyun 		val = (0xf0 | (((u32) msg->addr & 0x300) >> 7)) &
595*4882a593Smuzhiyun 			I2C_DR_D_MASK;
596*4882a593Smuzhiyun 		if (msg->flags & I2C_M_RD)
597*4882a593Smuzhiyun 			/* This is the direction bit */
598*4882a593Smuzhiyun 			val |= 0x01;
599*4882a593Smuzhiyun 	} else {
600*4882a593Smuzhiyun 		val = i2c_8bit_addr_from_msg(msg);
601*4882a593Smuzhiyun 	}
602*4882a593Smuzhiyun 
603*4882a593Smuzhiyun 	if (resend) {
604*4882a593Smuzhiyun 		if (msg->flags & I2C_M_RD)
605*4882a593Smuzhiyun 			dev_dbg(&dev->pdev->dev, "read resend\n");
606*4882a593Smuzhiyun 		else
607*4882a593Smuzhiyun 			dev_dbg(&dev->pdev->dev, "write resend\n");
608*4882a593Smuzhiyun 	}
609*4882a593Smuzhiyun 
610*4882a593Smuzhiyun 	stu300_wr8(val, dev->virtbase + I2C_DR);
611*4882a593Smuzhiyun 
612*4882a593Smuzhiyun 	/* For 10bit addressing, await 10bit request (EVENT 9) */
613*4882a593Smuzhiyun 	if (msg->flags & I2C_M_TEN) {
614*4882a593Smuzhiyun 		ret = stu300_await_event(dev, STU300_EVENT_9);
615*4882a593Smuzhiyun 		/*
616*4882a593Smuzhiyun 		 * The slave device wants a 10bit address, send the rest
617*4882a593Smuzhiyun 		 * of the bits (the LSBits)
618*4882a593Smuzhiyun 		 */
619*4882a593Smuzhiyun 		val = msg->addr & I2C_DR_D_MASK;
620*4882a593Smuzhiyun 		/* This clears "event 9" */
621*4882a593Smuzhiyun 		stu300_wr8(val, dev->virtbase + I2C_DR);
622*4882a593Smuzhiyun 		if (ret != 0)
623*4882a593Smuzhiyun 			return ret;
624*4882a593Smuzhiyun 	}
625*4882a593Smuzhiyun 	/* FIXME: Why no else here? two events for 10bit?
626*4882a593Smuzhiyun 	 * Await event 6 (normal) or event 9 (10bit)
627*4882a593Smuzhiyun 	 */
628*4882a593Smuzhiyun 
629*4882a593Smuzhiyun 	if (resend)
630*4882a593Smuzhiyun 		dev_dbg(&dev->pdev->dev, "await event 6\n");
631*4882a593Smuzhiyun 	ret = stu300_await_event(dev, STU300_EVENT_6);
632*4882a593Smuzhiyun 
633*4882a593Smuzhiyun 	/*
634*4882a593Smuzhiyun 	 * Clear any pending EVENT 6 no matter what happened during
635*4882a593Smuzhiyun 	 * await_event.
636*4882a593Smuzhiyun 	 */
637*4882a593Smuzhiyun 	val = stu300_r8(dev->virtbase + I2C_CR);
638*4882a593Smuzhiyun 	val |= I2C_CR_PERIPHERAL_ENABLE;
639*4882a593Smuzhiyun 	stu300_wr8(val, dev->virtbase + I2C_CR);
640*4882a593Smuzhiyun 
641*4882a593Smuzhiyun 	return ret;
642*4882a593Smuzhiyun }
643*4882a593Smuzhiyun 
stu300_xfer_msg(struct i2c_adapter * adap,struct i2c_msg * msg,int stop)644*4882a593Smuzhiyun static int stu300_xfer_msg(struct i2c_adapter *adap,
645*4882a593Smuzhiyun 			     struct i2c_msg *msg, int stop)
646*4882a593Smuzhiyun {
647*4882a593Smuzhiyun 	u32 cr;
648*4882a593Smuzhiyun 	u32 val;
649*4882a593Smuzhiyun 	u32 i;
650*4882a593Smuzhiyun 	int ret;
651*4882a593Smuzhiyun 	int attempts = 0;
652*4882a593Smuzhiyun 	struct stu300_dev *dev = i2c_get_adapdata(adap);
653*4882a593Smuzhiyun 
654*4882a593Smuzhiyun 	clk_enable(dev->clk);
655*4882a593Smuzhiyun 
656*4882a593Smuzhiyun 	/* Remove this if (0) to trace each and every message. */
657*4882a593Smuzhiyun 	if (0) {
658*4882a593Smuzhiyun 		dev_dbg(&dev->pdev->dev, "I2C message to: 0x%04x, len: %d, "
659*4882a593Smuzhiyun 			"flags: 0x%04x, stop: %d\n",
660*4882a593Smuzhiyun 			msg->addr, msg->len, msg->flags, stop);
661*4882a593Smuzhiyun 	}
662*4882a593Smuzhiyun 
663*4882a593Smuzhiyun 	/*
664*4882a593Smuzhiyun 	 * For some reason, sending the address sometimes fails when running
665*4882a593Smuzhiyun 	 * on  the 13 MHz clock. No interrupt arrives. This is a work around,
666*4882a593Smuzhiyun 	 * which tries to restart and send the address up to 10 times before
667*4882a593Smuzhiyun 	 * really giving up. Usually 5 to 8 attempts are enough.
668*4882a593Smuzhiyun 	 */
669*4882a593Smuzhiyun 	do {
670*4882a593Smuzhiyun 		if (attempts)
671*4882a593Smuzhiyun 			dev_dbg(&dev->pdev->dev, "wait while busy\n");
672*4882a593Smuzhiyun 		/* Check that the bus is free, or wait until some timeout */
673*4882a593Smuzhiyun 		ret = stu300_wait_while_busy(dev);
674*4882a593Smuzhiyun 		if (ret != 0)
675*4882a593Smuzhiyun 			goto exit_disable;
676*4882a593Smuzhiyun 
677*4882a593Smuzhiyun 		if (attempts)
678*4882a593Smuzhiyun 			dev_dbg(&dev->pdev->dev, "re-int hw\n");
679*4882a593Smuzhiyun 		/*
680*4882a593Smuzhiyun 		 * According to ST, there is no problem if the clock is
681*4882a593Smuzhiyun 		 * changed between 13 and 26 MHz during a transfer.
682*4882a593Smuzhiyun 		 */
683*4882a593Smuzhiyun 		ret = stu300_init_hw(dev);
684*4882a593Smuzhiyun 		if (ret)
685*4882a593Smuzhiyun 			goto exit_disable;
686*4882a593Smuzhiyun 
687*4882a593Smuzhiyun 		/* Send a start condition */
688*4882a593Smuzhiyun 		cr = I2C_CR_PERIPHERAL_ENABLE;
689*4882a593Smuzhiyun 		/* Setting the START bit puts the block in master mode */
690*4882a593Smuzhiyun 		if (!(msg->flags & I2C_M_NOSTART))
691*4882a593Smuzhiyun 			cr |= I2C_CR_START_ENABLE;
692*4882a593Smuzhiyun 		if ((msg->flags & I2C_M_RD) && (msg->len > 1))
693*4882a593Smuzhiyun 			/* On read more than 1 byte, we need ack. */
694*4882a593Smuzhiyun 			cr |= I2C_CR_ACK_ENABLE;
695*4882a593Smuzhiyun 		/* Check that it gets through */
696*4882a593Smuzhiyun 		if (!(msg->flags & I2C_M_NOSTART)) {
697*4882a593Smuzhiyun 			if (attempts)
698*4882a593Smuzhiyun 				dev_dbg(&dev->pdev->dev, "send start event\n");
699*4882a593Smuzhiyun 			ret = stu300_start_and_await_event(dev, cr,
700*4882a593Smuzhiyun 							     STU300_EVENT_5);
701*4882a593Smuzhiyun 		}
702*4882a593Smuzhiyun 
703*4882a593Smuzhiyun 		if (attempts)
704*4882a593Smuzhiyun 			dev_dbg(&dev->pdev->dev, "send address\n");
705*4882a593Smuzhiyun 
706*4882a593Smuzhiyun 		if (ret == 0)
707*4882a593Smuzhiyun 			/* Send address */
708*4882a593Smuzhiyun 			ret = stu300_send_address(dev, msg, attempts != 0);
709*4882a593Smuzhiyun 
710*4882a593Smuzhiyun 		if (ret != 0) {
711*4882a593Smuzhiyun 			attempts++;
712*4882a593Smuzhiyun 			dev_dbg(&dev->pdev->dev, "failed sending address, "
713*4882a593Smuzhiyun 				"retrying. Attempt: %d msg_index: %d/%d\n",
714*4882a593Smuzhiyun 			       attempts, dev->msg_index, dev->msg_len);
715*4882a593Smuzhiyun 		}
716*4882a593Smuzhiyun 
717*4882a593Smuzhiyun 	} while (ret != 0 && attempts < NUM_ADDR_RESEND_ATTEMPTS);
718*4882a593Smuzhiyun 
719*4882a593Smuzhiyun 	if (attempts < NUM_ADDR_RESEND_ATTEMPTS && attempts > 0) {
720*4882a593Smuzhiyun 		dev_dbg(&dev->pdev->dev, "managed to get address "
721*4882a593Smuzhiyun 			"through after %d attempts\n", attempts);
722*4882a593Smuzhiyun 	} else if (attempts == NUM_ADDR_RESEND_ATTEMPTS) {
723*4882a593Smuzhiyun 		dev_dbg(&dev->pdev->dev, "I give up, tried %d times "
724*4882a593Smuzhiyun 			"to resend address.\n",
725*4882a593Smuzhiyun 			NUM_ADDR_RESEND_ATTEMPTS);
726*4882a593Smuzhiyun 		goto exit_disable;
727*4882a593Smuzhiyun 	}
728*4882a593Smuzhiyun 
729*4882a593Smuzhiyun 
730*4882a593Smuzhiyun 	if (msg->flags & I2C_M_RD) {
731*4882a593Smuzhiyun 		/* READ: we read the actual bytes one at a time */
732*4882a593Smuzhiyun 		for (i = 0; i < msg->len; i++) {
733*4882a593Smuzhiyun 			if (i == msg->len-1) {
734*4882a593Smuzhiyun 				/*
735*4882a593Smuzhiyun 				 * Disable ACK and set STOP condition before
736*4882a593Smuzhiyun 				 * reading last byte
737*4882a593Smuzhiyun 				 */
738*4882a593Smuzhiyun 				val = I2C_CR_PERIPHERAL_ENABLE;
739*4882a593Smuzhiyun 
740*4882a593Smuzhiyun 				if (stop)
741*4882a593Smuzhiyun 					val |= I2C_CR_STOP_ENABLE;
742*4882a593Smuzhiyun 
743*4882a593Smuzhiyun 				stu300_wr8(val,
744*4882a593Smuzhiyun 					   dev->virtbase + I2C_CR);
745*4882a593Smuzhiyun 			}
746*4882a593Smuzhiyun 			/* Wait for this byte... */
747*4882a593Smuzhiyun 			ret = stu300_await_event(dev, STU300_EVENT_7);
748*4882a593Smuzhiyun 			if (ret != 0)
749*4882a593Smuzhiyun 				goto exit_disable;
750*4882a593Smuzhiyun 			/* This clears event 7 */
751*4882a593Smuzhiyun 			msg->buf[i] = (u8) stu300_r8(dev->virtbase + I2C_DR);
752*4882a593Smuzhiyun 		}
753*4882a593Smuzhiyun 	} else {
754*4882a593Smuzhiyun 		/* WRITE: we send the actual bytes one at a time */
755*4882a593Smuzhiyun 		for (i = 0; i < msg->len; i++) {
756*4882a593Smuzhiyun 			/* Write the byte */
757*4882a593Smuzhiyun 			stu300_wr8(msg->buf[i],
758*4882a593Smuzhiyun 				   dev->virtbase + I2C_DR);
759*4882a593Smuzhiyun 			/* Check status */
760*4882a593Smuzhiyun 			ret = stu300_await_event(dev, STU300_EVENT_8);
761*4882a593Smuzhiyun 			/* Next write to DR will clear event 8 */
762*4882a593Smuzhiyun 			if (ret != 0) {
763*4882a593Smuzhiyun 				dev_err(&dev->pdev->dev, "error awaiting "
764*4882a593Smuzhiyun 				       "event 8 (%d)\n", ret);
765*4882a593Smuzhiyun 				goto exit_disable;
766*4882a593Smuzhiyun 			}
767*4882a593Smuzhiyun 		}
768*4882a593Smuzhiyun 		/* Check NAK */
769*4882a593Smuzhiyun 		if (!(msg->flags & I2C_M_IGNORE_NAK)) {
770*4882a593Smuzhiyun 			if (stu300_r8(dev->virtbase + I2C_SR2) &
771*4882a593Smuzhiyun 			    I2C_SR2_AF_IND) {
772*4882a593Smuzhiyun 				dev_err(&dev->pdev->dev, "I2C payload "
773*4882a593Smuzhiyun 				       "send returned NAK!\n");
774*4882a593Smuzhiyun 				ret = -EIO;
775*4882a593Smuzhiyun 				goto exit_disable;
776*4882a593Smuzhiyun 			}
777*4882a593Smuzhiyun 		}
778*4882a593Smuzhiyun 		if (stop) {
779*4882a593Smuzhiyun 			/* Send stop condition */
780*4882a593Smuzhiyun 			val = I2C_CR_PERIPHERAL_ENABLE;
781*4882a593Smuzhiyun 			val |= I2C_CR_STOP_ENABLE;
782*4882a593Smuzhiyun 			stu300_wr8(val, dev->virtbase + I2C_CR);
783*4882a593Smuzhiyun 		}
784*4882a593Smuzhiyun 	}
785*4882a593Smuzhiyun 
786*4882a593Smuzhiyun 	/* Check that the bus is free, or wait until some timeout occurs */
787*4882a593Smuzhiyun 	ret = stu300_wait_while_busy(dev);
788*4882a593Smuzhiyun 	if (ret != 0) {
789*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev, "timeout waiting for transfer "
790*4882a593Smuzhiyun 		       "to commence.\n");
791*4882a593Smuzhiyun 		goto exit_disable;
792*4882a593Smuzhiyun 	}
793*4882a593Smuzhiyun 
794*4882a593Smuzhiyun 	/* Dummy read status registers */
795*4882a593Smuzhiyun 	val = stu300_r8(dev->virtbase + I2C_SR2);
796*4882a593Smuzhiyun 	val = stu300_r8(dev->virtbase + I2C_SR1);
797*4882a593Smuzhiyun 	ret = 0;
798*4882a593Smuzhiyun 
799*4882a593Smuzhiyun  exit_disable:
800*4882a593Smuzhiyun 	/* Disable controller */
801*4882a593Smuzhiyun 	stu300_wr8(0x00, dev->virtbase + I2C_CR);
802*4882a593Smuzhiyun 	clk_disable(dev->clk);
803*4882a593Smuzhiyun 	return ret;
804*4882a593Smuzhiyun }
805*4882a593Smuzhiyun 
stu300_xfer(struct i2c_adapter * adap,struct i2c_msg * msgs,int num)806*4882a593Smuzhiyun static int stu300_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
807*4882a593Smuzhiyun 			 int num)
808*4882a593Smuzhiyun {
809*4882a593Smuzhiyun 	int ret = -1;
810*4882a593Smuzhiyun 	int i;
811*4882a593Smuzhiyun 
812*4882a593Smuzhiyun 	struct stu300_dev *dev = i2c_get_adapdata(adap);
813*4882a593Smuzhiyun 	dev->msg_len = num;
814*4882a593Smuzhiyun 
815*4882a593Smuzhiyun 	for (i = 0; i < num; i++) {
816*4882a593Smuzhiyun 		/*
817*4882a593Smuzhiyun 		 * Another driver appears to send stop for each message,
818*4882a593Smuzhiyun 		 * here we only do that for the last message. Possibly some
819*4882a593Smuzhiyun 		 * peripherals require this behaviour, then their drivers
820*4882a593Smuzhiyun 		 * have to send single messages in order to get "stop" for
821*4882a593Smuzhiyun 		 * each message.
822*4882a593Smuzhiyun 		 */
823*4882a593Smuzhiyun 		dev->msg_index = i;
824*4882a593Smuzhiyun 
825*4882a593Smuzhiyun 		ret = stu300_xfer_msg(adap, &msgs[i], (i == (num - 1)));
826*4882a593Smuzhiyun 
827*4882a593Smuzhiyun 		if (ret != 0) {
828*4882a593Smuzhiyun 			num = ret;
829*4882a593Smuzhiyun 			break;
830*4882a593Smuzhiyun 		}
831*4882a593Smuzhiyun 	}
832*4882a593Smuzhiyun 
833*4882a593Smuzhiyun 	return num;
834*4882a593Smuzhiyun }
835*4882a593Smuzhiyun 
stu300_xfer_todo(struct i2c_adapter * adap,struct i2c_msg * msgs,int num)836*4882a593Smuzhiyun static int stu300_xfer_todo(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
837*4882a593Smuzhiyun {
838*4882a593Smuzhiyun 	/* TODO: implement polling for this case if need be. */
839*4882a593Smuzhiyun 	WARN(1, "%s: atomic transfers not implemented\n", dev_name(&adap->dev));
840*4882a593Smuzhiyun 	return -EOPNOTSUPP;
841*4882a593Smuzhiyun }
842*4882a593Smuzhiyun 
stu300_func(struct i2c_adapter * adap)843*4882a593Smuzhiyun static u32 stu300_func(struct i2c_adapter *adap)
844*4882a593Smuzhiyun {
845*4882a593Smuzhiyun 	/* This is the simplest thing you can think of... */
846*4882a593Smuzhiyun 	return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR;
847*4882a593Smuzhiyun }
848*4882a593Smuzhiyun 
849*4882a593Smuzhiyun static const struct i2c_algorithm stu300_algo = {
850*4882a593Smuzhiyun 	.master_xfer = stu300_xfer,
851*4882a593Smuzhiyun 	.master_xfer_atomic = stu300_xfer_todo,
852*4882a593Smuzhiyun 	.functionality = stu300_func,
853*4882a593Smuzhiyun };
854*4882a593Smuzhiyun 
855*4882a593Smuzhiyun static const struct i2c_adapter_quirks stu300_quirks = {
856*4882a593Smuzhiyun 	.flags = I2C_AQ_NO_ZERO_LEN,
857*4882a593Smuzhiyun };
858*4882a593Smuzhiyun 
stu300_probe(struct platform_device * pdev)859*4882a593Smuzhiyun static int stu300_probe(struct platform_device *pdev)
860*4882a593Smuzhiyun {
861*4882a593Smuzhiyun 	struct stu300_dev *dev;
862*4882a593Smuzhiyun 	struct i2c_adapter *adap;
863*4882a593Smuzhiyun 	int bus_nr;
864*4882a593Smuzhiyun 	int ret = 0;
865*4882a593Smuzhiyun 
866*4882a593Smuzhiyun 	dev = devm_kzalloc(&pdev->dev, sizeof(struct stu300_dev), GFP_KERNEL);
867*4882a593Smuzhiyun 	if (!dev)
868*4882a593Smuzhiyun 		return -ENOMEM;
869*4882a593Smuzhiyun 
870*4882a593Smuzhiyun 	bus_nr = pdev->id;
871*4882a593Smuzhiyun 	dev->clk = devm_clk_get(&pdev->dev, NULL);
872*4882a593Smuzhiyun 	if (IS_ERR(dev->clk)) {
873*4882a593Smuzhiyun 		dev_err(&pdev->dev, "could not retrieve i2c bus clock\n");
874*4882a593Smuzhiyun 		return PTR_ERR(dev->clk);
875*4882a593Smuzhiyun 	}
876*4882a593Smuzhiyun 
877*4882a593Smuzhiyun 	dev->pdev = pdev;
878*4882a593Smuzhiyun 	dev->virtbase = devm_platform_ioremap_resource(pdev, 0);
879*4882a593Smuzhiyun 	dev_dbg(&pdev->dev, "initialize bus device I2C%d on virtual "
880*4882a593Smuzhiyun 		"base %p\n", bus_nr, dev->virtbase);
881*4882a593Smuzhiyun 	if (IS_ERR(dev->virtbase))
882*4882a593Smuzhiyun 		return PTR_ERR(dev->virtbase);
883*4882a593Smuzhiyun 
884*4882a593Smuzhiyun 	dev->irq = platform_get_irq(pdev, 0);
885*4882a593Smuzhiyun 	ret = devm_request_irq(&pdev->dev, dev->irq, stu300_irh, 0, NAME, dev);
886*4882a593Smuzhiyun 	if (ret < 0)
887*4882a593Smuzhiyun 		return ret;
888*4882a593Smuzhiyun 
889*4882a593Smuzhiyun 	dev->speed = scl_frequency;
890*4882a593Smuzhiyun 
891*4882a593Smuzhiyun 	clk_prepare_enable(dev->clk);
892*4882a593Smuzhiyun 	ret = stu300_init_hw(dev);
893*4882a593Smuzhiyun 	clk_disable(dev->clk);
894*4882a593Smuzhiyun 	if (ret != 0) {
895*4882a593Smuzhiyun 		dev_err(&dev->pdev->dev, "error initializing hardware.\n");
896*4882a593Smuzhiyun 		return -EIO;
897*4882a593Smuzhiyun 	}
898*4882a593Smuzhiyun 
899*4882a593Smuzhiyun 	/* IRQ event handling initialization */
900*4882a593Smuzhiyun 	spin_lock_init(&dev->cmd_issue_lock);
901*4882a593Smuzhiyun 	dev->cmd_event = STU300_EVENT_NONE;
902*4882a593Smuzhiyun 	dev->cmd_err = STU300_ERROR_NONE;
903*4882a593Smuzhiyun 
904*4882a593Smuzhiyun 	adap = &dev->adapter;
905*4882a593Smuzhiyun 	adap->owner = THIS_MODULE;
906*4882a593Smuzhiyun 	/* DDC class but actually often used for more generic I2C */
907*4882a593Smuzhiyun 	adap->class = I2C_CLASS_DEPRECATED;
908*4882a593Smuzhiyun 	strlcpy(adap->name, "ST Microelectronics DDC I2C adapter",
909*4882a593Smuzhiyun 		sizeof(adap->name));
910*4882a593Smuzhiyun 	adap->nr = bus_nr;
911*4882a593Smuzhiyun 	adap->algo = &stu300_algo;
912*4882a593Smuzhiyun 	adap->dev.parent = &pdev->dev;
913*4882a593Smuzhiyun 	adap->dev.of_node = pdev->dev.of_node;
914*4882a593Smuzhiyun 	adap->quirks = &stu300_quirks;
915*4882a593Smuzhiyun 
916*4882a593Smuzhiyun 	i2c_set_adapdata(adap, dev);
917*4882a593Smuzhiyun 
918*4882a593Smuzhiyun 	/* i2c device drivers may be active on return from add_adapter() */
919*4882a593Smuzhiyun 	ret = i2c_add_numbered_adapter(adap);
920*4882a593Smuzhiyun 	if (ret)
921*4882a593Smuzhiyun 		return ret;
922*4882a593Smuzhiyun 
923*4882a593Smuzhiyun 	platform_set_drvdata(pdev, dev);
924*4882a593Smuzhiyun 	dev_info(&pdev->dev, "ST DDC I2C @ %p, irq %d\n",
925*4882a593Smuzhiyun 		 dev->virtbase, dev->irq);
926*4882a593Smuzhiyun 
927*4882a593Smuzhiyun 	return 0;
928*4882a593Smuzhiyun }
929*4882a593Smuzhiyun 
930*4882a593Smuzhiyun #ifdef CONFIG_PM_SLEEP
stu300_suspend(struct device * device)931*4882a593Smuzhiyun static int stu300_suspend(struct device *device)
932*4882a593Smuzhiyun {
933*4882a593Smuzhiyun 	struct stu300_dev *dev = dev_get_drvdata(device);
934*4882a593Smuzhiyun 
935*4882a593Smuzhiyun 	/* Turn off everything */
936*4882a593Smuzhiyun 	stu300_wr8(0x00, dev->virtbase + I2C_CR);
937*4882a593Smuzhiyun 	return 0;
938*4882a593Smuzhiyun }
939*4882a593Smuzhiyun 
stu300_resume(struct device * device)940*4882a593Smuzhiyun static int stu300_resume(struct device *device)
941*4882a593Smuzhiyun {
942*4882a593Smuzhiyun 	int ret = 0;
943*4882a593Smuzhiyun 	struct stu300_dev *dev = dev_get_drvdata(device);
944*4882a593Smuzhiyun 
945*4882a593Smuzhiyun 	clk_enable(dev->clk);
946*4882a593Smuzhiyun 	ret = stu300_init_hw(dev);
947*4882a593Smuzhiyun 	clk_disable(dev->clk);
948*4882a593Smuzhiyun 
949*4882a593Smuzhiyun 	if (ret != 0)
950*4882a593Smuzhiyun 		dev_err(device, "error re-initializing hardware.\n");
951*4882a593Smuzhiyun 	return ret;
952*4882a593Smuzhiyun }
953*4882a593Smuzhiyun 
954*4882a593Smuzhiyun static SIMPLE_DEV_PM_OPS(stu300_pm, stu300_suspend, stu300_resume);
955*4882a593Smuzhiyun #define STU300_I2C_PM	(&stu300_pm)
956*4882a593Smuzhiyun #else
957*4882a593Smuzhiyun #define STU300_I2C_PM	NULL
958*4882a593Smuzhiyun #endif
959*4882a593Smuzhiyun 
stu300_remove(struct platform_device * pdev)960*4882a593Smuzhiyun static int stu300_remove(struct platform_device *pdev)
961*4882a593Smuzhiyun {
962*4882a593Smuzhiyun 	struct stu300_dev *dev = platform_get_drvdata(pdev);
963*4882a593Smuzhiyun 
964*4882a593Smuzhiyun 	i2c_del_adapter(&dev->adapter);
965*4882a593Smuzhiyun 	/* Turn off everything */
966*4882a593Smuzhiyun 	stu300_wr8(0x00, dev->virtbase + I2C_CR);
967*4882a593Smuzhiyun 	return 0;
968*4882a593Smuzhiyun }
969*4882a593Smuzhiyun 
970*4882a593Smuzhiyun static const struct of_device_id stu300_dt_match[] = {
971*4882a593Smuzhiyun 	{ .compatible = "st,ddci2c" },
972*4882a593Smuzhiyun 	{},
973*4882a593Smuzhiyun };
974*4882a593Smuzhiyun MODULE_DEVICE_TABLE(of, stu300_dt_match);
975*4882a593Smuzhiyun 
976*4882a593Smuzhiyun static struct platform_driver stu300_i2c_driver = {
977*4882a593Smuzhiyun 	.driver = {
978*4882a593Smuzhiyun 		.name	= NAME,
979*4882a593Smuzhiyun 		.pm	= STU300_I2C_PM,
980*4882a593Smuzhiyun 		.of_match_table = stu300_dt_match,
981*4882a593Smuzhiyun 	},
982*4882a593Smuzhiyun 	.probe = stu300_probe,
983*4882a593Smuzhiyun 	.remove = stu300_remove,
984*4882a593Smuzhiyun 
985*4882a593Smuzhiyun };
986*4882a593Smuzhiyun 
stu300_init(void)987*4882a593Smuzhiyun static int __init stu300_init(void)
988*4882a593Smuzhiyun {
989*4882a593Smuzhiyun 	return platform_driver_register(&stu300_i2c_driver);
990*4882a593Smuzhiyun }
991*4882a593Smuzhiyun 
stu300_exit(void)992*4882a593Smuzhiyun static void __exit stu300_exit(void)
993*4882a593Smuzhiyun {
994*4882a593Smuzhiyun 	platform_driver_unregister(&stu300_i2c_driver);
995*4882a593Smuzhiyun }
996*4882a593Smuzhiyun 
997*4882a593Smuzhiyun /*
998*4882a593Smuzhiyun  * The systems using this bus often have very basic devices such
999*4882a593Smuzhiyun  * as regulators on the I2C bus, so this needs to be loaded early.
1000*4882a593Smuzhiyun  * Therefore it is registered in the subsys_initcall().
1001*4882a593Smuzhiyun  */
1002*4882a593Smuzhiyun subsys_initcall(stu300_init);
1003*4882a593Smuzhiyun module_exit(stu300_exit);
1004*4882a593Smuzhiyun 
1005*4882a593Smuzhiyun MODULE_AUTHOR("Linus Walleij <linus.walleij@stericsson.com>");
1006*4882a593Smuzhiyun MODULE_DESCRIPTION("ST Micro DDC I2C adapter (" NAME ")");
1007*4882a593Smuzhiyun MODULE_LICENSE("GPL");
1008*4882a593Smuzhiyun MODULE_ALIAS("platform:" NAME);
1009