36
36
#include <linux/i2c.h>
37
37
#include <linux/slab.h>
39
#include <asm/mach-au1x00/au1xxx.h>
39
#include <asm/mach-au1x00/au1000.h>
40
40
#include <asm/mach-au1x00/au1xxx_psc.h>
44
#define PSC_SMBCFG 0x08
45
#define PSC_SMBMSK 0x0C
46
#define PSC_SMBPCR 0x10
47
#define PSC_SMBSTAT 0x14
48
#define PSC_SMBEVNT 0x18
49
#define PSC_SMBTXRX 0x1C
50
#define PSC_SMBTMR 0x20
42
52
struct i2c_au1550_data {
53
void __iomem *psc_base;
46
55
struct i2c_adapter adap;
47
56
struct resource *ioarea;
51
wait_xfer_done(struct i2c_au1550_data *adap)
55
volatile psc_smb_t *sp;
57
sp = (volatile psc_smb_t *)(adap->psc_base);
59
/* Wait for Tx Buffer Empty
59
static inline void WR(struct i2c_au1550_data *a, int r, unsigned long v)
61
__raw_writel(v, a->psc_base + r);
65
static inline unsigned long RD(struct i2c_au1550_data *a, int r)
67
return __raw_readl(a->psc_base + r);
70
static int wait_xfer_done(struct i2c_au1550_data *adap)
74
/* Wait for Tx Buffer Empty */
61
75
for (i = 0; i < adap->xfer_timeout; i++) {
62
stat = sp->psc_smbstat;
64
if ((stat & PSC_SMBSTAT_TE) != 0)
76
if (RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_TE)
74
wait_ack(struct i2c_au1550_data *adap)
85
static int wait_ack(struct i2c_au1550_data *adap)
77
volatile psc_smb_t *sp;
79
89
if (wait_xfer_done(adap))
82
sp = (volatile psc_smb_t *)(adap->psc_base);
84
stat = sp->psc_smbevnt;
92
stat = RD(adap, PSC_SMBEVNT);
87
93
if ((stat & (PSC_SMBEVNT_DN | PSC_SMBEVNT_AN | PSC_SMBEVNT_AL)) != 0)
94
wait_master_done(struct i2c_au1550_data *adap)
99
static int wait_master_done(struct i2c_au1550_data *adap)
98
volatile psc_smb_t *sp;
100
sp = (volatile psc_smb_t *)(adap->psc_base);
102
/* Wait for Master Done.
104
for (i = 0; i < adap->xfer_timeout; i++) {
105
stat = sp->psc_smbevnt;
107
if ((stat & PSC_SMBEVNT_MD) != 0)
103
/* Wait for Master Done. */
104
for (i = 0; i < 2 * adap->xfer_timeout; i++) {
105
if ((RD(adap, PSC_SMBEVNT) & PSC_SMBEVNT_MD) != 0)
116
114
do_address(struct i2c_au1550_data *adap, unsigned int addr, int rd, int q)
118
volatile psc_smb_t *sp;
121
sp = (volatile psc_smb_t *)(adap->psc_base);
123
/* Reset the FIFOs, clear events.
125
stat = sp->psc_smbstat;
126
sp->psc_smbevnt = PSC_SMBEVNT_ALLCLR;
118
/* Reset the FIFOs, clear events. */
119
stat = RD(adap, PSC_SMBSTAT);
120
WR(adap, PSC_SMBEVNT, PSC_SMBEVNT_ALLCLR);
129
122
if (!(stat & PSC_SMBSTAT_TE) || !(stat & PSC_SMBSTAT_RE)) {
130
sp->psc_smbpcr = PSC_SMBPCR_DC;
133
stat = sp->psc_smbpcr;
135
} while ((stat & PSC_SMBPCR_DC) != 0);
123
WR(adap, PSC_SMBPCR, PSC_SMBPCR_DC);
124
while ((RD(adap, PSC_SMBPCR) & PSC_SMBPCR_DC) != 0)
139
/* Write out the i2c chip address and specify operation
129
/* Write out the i2c chip address and specify operation */
147
136
addr |= PSC_SMBTXRX_STP;
149
/* Put byte into fifo, start up master.
151
sp->psc_smbtxrx = addr;
153
sp->psc_smbpcr = PSC_SMBPCR_MS;
138
/* Put byte into fifo, start up master. */
139
WR(adap, PSC_SMBTXRX, addr);
140
WR(adap, PSC_SMBPCR, PSC_SMBPCR_MS);
155
141
if (wait_ack(adap))
157
143
return (q) ? wait_master_done(adap) : 0;
161
wait_for_rx_byte(struct i2c_au1550_data *adap, u32 *ret_data)
146
static int wait_for_rx_byte(struct i2c_au1550_data *adap, unsigned char *out)
165
volatile psc_smb_t *sp;
167
150
if (wait_xfer_done(adap))
170
sp = (volatile psc_smb_t *)(adap->psc_base);
172
153
j = adap->xfer_timeout * 100;
178
stat = sp->psc_smbstat;
180
if ((stat & PSC_SMBSTAT_RE) == 0)
159
if ((RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_RE) == 0)
185
data = sp->psc_smbtxrx;
165
*out = RD(adap, PSC_SMBTXRX);
193
i2c_read(struct i2c_au1550_data *adap, unsigned char *buf,
170
static int i2c_read(struct i2c_au1550_data *adap, unsigned char *buf,
194
171
unsigned int len)
198
volatile psc_smb_t *sp;
204
179
* zero bytes for timing, waiting for bytes to appear in the
205
180
* receive fifo, then reading the bytes.
208
sp = (volatile psc_smb_t *)(adap->psc_base);
211
while (i < (len-1)) {
214
if (wait_for_rx_byte(adap, &data))
183
while (i < (len - 1)) {
184
WR(adap, PSC_SMBTXRX, 0);
185
if (wait_for_rx_byte(adap, &buf[i]))
221
/* The last byte has to indicate transfer done.
223
sp->psc_smbtxrx = PSC_SMBTXRX_STP;
191
/* The last byte has to indicate transfer done. */
192
WR(adap, PSC_SMBTXRX, PSC_SMBTXRX_STP);
225
193
if (wait_master_done(adap))
228
data = sp->psc_smbtxrx;
196
buf[i] = (unsigned char)(RD(adap, PSC_SMBTXRX) & 0xff);
235
i2c_write(struct i2c_au1550_data *adap, unsigned char *buf,
200
static int i2c_write(struct i2c_au1550_data *adap, unsigned char *buf,
236
201
unsigned int len)
240
volatile psc_smb_t *sp;
245
sp = (volatile psc_smb_t *)(adap->psc_base);
248
210
while (i < (len-1)) {
250
sp->psc_smbtxrx = data;
212
WR(adap, PSC_SMBTXRX, data);
252
213
if (wait_ack(adap))
257
/* The last byte has to indicate transfer done.
218
/* The last byte has to indicate transfer done. */
260
220
data |= PSC_SMBTXRX_STP;
261
sp->psc_smbtxrx = data;
221
WR(adap, PSC_SMBTXRX, data);
263
222
if (wait_master_done(adap))
269
228
au1550_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, int num)
271
230
struct i2c_au1550_data *adap = i2c_adap->algo_data;
272
volatile psc_smb_t *sp = (volatile psc_smb_t *)adap->psc_base;
273
231
struct i2c_msg *p;
276
sp->psc_ctrl = PSC_CTRL_ENABLE;
234
WR(adap, PSC_CTRL, PSC_CTRL_ENABLE);
279
236
for (i = 0; !err && i < num; i++) {
313
268
static void i2c_au1550_setup(struct i2c_au1550_data *priv)
315
volatile psc_smb_t *sp = (volatile psc_smb_t *)priv->psc_base;
318
sp->psc_ctrl = PSC_CTRL_DISABLE;
320
sp->psc_sel = PSC_SEL_PS_SMBUSMODE;
323
sp->psc_ctrl = PSC_CTRL_ENABLE;
326
stat = sp->psc_smbstat;
328
} while ((stat & PSC_SMBSTAT_SR) == 0);
330
sp->psc_smbcfg = (PSC_SMBCFG_RT_FIFO8 | PSC_SMBCFG_TT_FIFO8 |
331
PSC_SMBCFG_DD_DISABLE);
272
WR(priv, PSC_CTRL, PSC_CTRL_DISABLE);
273
WR(priv, PSC_SEL, PSC_SEL_PS_SMBUSMODE);
274
WR(priv, PSC_SMBCFG, 0);
275
WR(priv, PSC_CTRL, PSC_CTRL_ENABLE);
276
while ((RD(priv, PSC_SMBSTAT) & PSC_SMBSTAT_SR) == 0)
279
cfg = PSC_SMBCFG_RT_FIFO8 | PSC_SMBCFG_TT_FIFO8 | PSC_SMBCFG_DD_DISABLE;
280
WR(priv, PSC_SMBCFG, cfg);
333
282
/* Divide by 8 to get a 6.25 MHz clock. The later protocol
334
283
* timings are based on this clock.
336
sp->psc_smbcfg |= PSC_SMBCFG_SET_DIV(PSC_SMBCFG_DIV8);
337
sp->psc_smbmsk = PSC_SMBMSK_ALLMASK;
285
cfg |= PSC_SMBCFG_SET_DIV(PSC_SMBCFG_DIV8);
286
WR(priv, PSC_SMBCFG, cfg);
287
WR(priv, PSC_SMBMSK, PSC_SMBMSK_ALLMASK);
340
289
/* Set the protocol timer values. See Table 71 in the
341
290
* Au1550 Data Book for standard timing values.
343
sp->psc_smbtmr = PSC_SMBTMR_SET_TH(0) | PSC_SMBTMR_SET_PS(15) | \
292
WR(priv, PSC_SMBTMR, PSC_SMBTMR_SET_TH(0) | PSC_SMBTMR_SET_PS(15) | \
344
293
PSC_SMBTMR_SET_PU(15) | PSC_SMBTMR_SET_SH(15) | \
345
294
PSC_SMBTMR_SET_SU(15) | PSC_SMBTMR_SET_CL(15) | \
346
PSC_SMBTMR_SET_CH(15);
349
sp->psc_smbcfg |= PSC_SMBCFG_DE_ENABLE;
351
stat = sp->psc_smbstat;
353
} while ((stat & PSC_SMBSTAT_SR) == 0);
355
sp->psc_ctrl = PSC_CTRL_SUSPEND;
295
PSC_SMBTMR_SET_CH(15));
297
cfg |= PSC_SMBCFG_DE_ENABLE;
298
WR(priv, PSC_SMBCFG, cfg);
299
while ((RD(priv, PSC_SMBSTAT) & PSC_SMBSTAT_SR) == 0)
302
WR(priv, PSC_CTRL, PSC_CTRL_SUSPEND);
359
305
static void i2c_au1550_disable(struct i2c_au1550_data *priv)
361
volatile psc_smb_t *sp = (volatile psc_smb_t *)priv->psc_base;
364
sp->psc_ctrl = PSC_CTRL_DISABLE;
307
WR(priv, PSC_SMBCFG, 0);
308
WR(priv, PSC_CTRL, PSC_CTRL_DISABLE);
406
352
priv->adap.dev.parent = &pdev->dev;
407
353
strlcpy(priv->adap.name, "Au1xxx PSC I2C", sizeof(priv->adap.name));
409
/* Now, set up the PSC for SMBus PIO mode.
355
/* Now, set up the PSC for SMBus PIO mode. */
411
356
i2c_au1550_setup(priv);
413
358
ret = i2c_add_numbered_adapter(&priv->adap);
430
i2c_au1550_remove(struct platform_device *pdev)
375
static int __devexit i2c_au1550_remove(struct platform_device *pdev)
432
377
struct i2c_au1550_data *priv = platform_get_drvdata(pdev);
434
379
platform_set_drvdata(pdev, NULL);
435
380
i2c_del_adapter(&priv->adap);
436
381
i2c_au1550_disable(priv);
382
iounmap(priv->psc_base);
437
383
release_resource(priv->ioarea);
438
384
kfree(priv->ioarea);
445
i2c_au1550_suspend(struct platform_device *pdev, pm_message_t state)
390
static int i2c_au1550_suspend(struct device *dev)
447
struct i2c_au1550_data *priv = platform_get_drvdata(pdev);
392
struct i2c_au1550_data *priv = dev_get_drvdata(dev);
449
394
i2c_au1550_disable(priv);
455
i2c_au1550_resume(struct platform_device *pdev)
399
static int i2c_au1550_resume(struct device *dev)
457
struct i2c_au1550_data *priv = platform_get_drvdata(pdev);
401
struct i2c_au1550_data *priv = dev_get_drvdata(dev);
459
403
i2c_au1550_setup(priv);
408
static const struct dev_pm_ops i2c_au1550_pmops = {
409
.suspend = i2c_au1550_suspend,
410
.resume = i2c_au1550_resume,
413
#define AU1XPSC_SMBUS_PMOPS (&i2c_au1550_pmops)
464
#define i2c_au1550_suspend NULL
465
#define i2c_au1550_resume NULL
416
#define AU1XPSC_SMBUS_PMOPS NULL
468
419
static struct platform_driver au1xpsc_smbus_driver = {
470
421
.name = "au1xpsc_smbus",
471
422
.owner = THIS_MODULE,
423
.pm = AU1XPSC_SMBUS_PMOPS,
473
425
.probe = i2c_au1550_probe,
474
426
.remove = __devexit_p(i2c_au1550_remove),
475
.suspend = i2c_au1550_suspend,
476
.resume = i2c_au1550_resume,
480
i2c_au1550_init(void)
429
static int __init i2c_au1550_init(void)
482
431
return platform_driver_register(&au1xpsc_smbus_driver);
486
i2c_au1550_exit(void)
434
static void __exit i2c_au1550_exit(void)
488
436
platform_driver_unregister(&au1xpsc_smbus_driver);