Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/common/sa1111.c
10817 views
1
/*
2
* linux/arch/arm/common/sa1111.c
3
*
4
* SA1111 support
5
*
6
* Original code by John Dorsey
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License version 2 as
10
* published by the Free Software Foundation.
11
*
12
* This file contains all generic SA1111 support.
13
*
14
* All initialization functions provided here are intended to be called
15
* from machine specific code with proper arguments when required.
16
*/
17
#include <linux/module.h>
18
#include <linux/init.h>
19
#include <linux/kernel.h>
20
#include <linux/delay.h>
21
#include <linux/errno.h>
22
#include <linux/ioport.h>
23
#include <linux/platform_device.h>
24
#include <linux/slab.h>
25
#include <linux/spinlock.h>
26
#include <linux/dma-mapping.h>
27
#include <linux/clk.h>
28
#include <linux/io.h>
29
30
#include <mach/hardware.h>
31
#include <asm/mach-types.h>
32
#include <asm/irq.h>
33
#include <asm/mach/irq.h>
34
#include <asm/sizes.h>
35
36
#include <asm/hardware/sa1111.h>
37
38
/* SA1111 IRQs */
39
#define IRQ_GPAIN0 (0)
40
#define IRQ_GPAIN1 (1)
41
#define IRQ_GPAIN2 (2)
42
#define IRQ_GPAIN3 (3)
43
#define IRQ_GPBIN0 (4)
44
#define IRQ_GPBIN1 (5)
45
#define IRQ_GPBIN2 (6)
46
#define IRQ_GPBIN3 (7)
47
#define IRQ_GPBIN4 (8)
48
#define IRQ_GPBIN5 (9)
49
#define IRQ_GPCIN0 (10)
50
#define IRQ_GPCIN1 (11)
51
#define IRQ_GPCIN2 (12)
52
#define IRQ_GPCIN3 (13)
53
#define IRQ_GPCIN4 (14)
54
#define IRQ_GPCIN5 (15)
55
#define IRQ_GPCIN6 (16)
56
#define IRQ_GPCIN7 (17)
57
#define IRQ_MSTXINT (18)
58
#define IRQ_MSRXINT (19)
59
#define IRQ_MSSTOPERRINT (20)
60
#define IRQ_TPTXINT (21)
61
#define IRQ_TPRXINT (22)
62
#define IRQ_TPSTOPERRINT (23)
63
#define SSPXMTINT (24)
64
#define SSPRCVINT (25)
65
#define SSPROR (26)
66
#define AUDXMTDMADONEA (32)
67
#define AUDRCVDMADONEA (33)
68
#define AUDXMTDMADONEB (34)
69
#define AUDRCVDMADONEB (35)
70
#define AUDTFSR (36)
71
#define AUDRFSR (37)
72
#define AUDTUR (38)
73
#define AUDROR (39)
74
#define AUDDTS (40)
75
#define AUDRDD (41)
76
#define AUDSTO (42)
77
#define IRQ_USBPWR (43)
78
#define IRQ_HCIM (44)
79
#define IRQ_HCIBUFFACC (45)
80
#define IRQ_HCIRMTWKP (46)
81
#define IRQ_NHCIMFCIR (47)
82
#define IRQ_USB_PORT_RESUME (48)
83
#define IRQ_S0_READY_NINT (49)
84
#define IRQ_S1_READY_NINT (50)
85
#define IRQ_S0_CD_VALID (51)
86
#define IRQ_S1_CD_VALID (52)
87
#define IRQ_S0_BVD1_STSCHG (53)
88
#define IRQ_S1_BVD1_STSCHG (54)
89
90
extern void __init sa1110_mb_enable(void);
91
92
/*
93
* We keep the following data for the overall SA1111. Note that the
94
* struct device and struct resource are "fake"; they should be supplied
95
* by the bus above us. However, in the interests of getting all SA1111
96
* drivers converted over to the device model, we provide this as an
97
* anchor point for all the other drivers.
98
*/
99
struct sa1111 {
100
struct device *dev;
101
struct clk *clk;
102
unsigned long phys;
103
int irq;
104
int irq_base; /* base for cascaded on-chip IRQs */
105
spinlock_t lock;
106
void __iomem *base;
107
#ifdef CONFIG_PM
108
void *saved_state;
109
#endif
110
};
111
112
/*
113
* We _really_ need to eliminate this. Its only users
114
* are the PWM and DMA checking code.
115
*/
116
static struct sa1111 *g_sa1111;
117
118
struct sa1111_dev_info {
119
unsigned long offset;
120
unsigned long skpcr_mask;
121
unsigned int devid;
122
unsigned int irq[6];
123
};
124
125
static struct sa1111_dev_info sa1111_devices[] = {
126
{
127
.offset = SA1111_USB,
128
.skpcr_mask = SKPCR_UCLKEN,
129
.devid = SA1111_DEVID_USB,
130
.irq = {
131
IRQ_USBPWR,
132
IRQ_HCIM,
133
IRQ_HCIBUFFACC,
134
IRQ_HCIRMTWKP,
135
IRQ_NHCIMFCIR,
136
IRQ_USB_PORT_RESUME
137
},
138
},
139
{
140
.offset = 0x0600,
141
.skpcr_mask = SKPCR_I2SCLKEN | SKPCR_L3CLKEN,
142
.devid = SA1111_DEVID_SAC,
143
.irq = {
144
AUDXMTDMADONEA,
145
AUDXMTDMADONEB,
146
AUDRCVDMADONEA,
147
AUDRCVDMADONEB
148
},
149
},
150
{
151
.offset = 0x0800,
152
.skpcr_mask = SKPCR_SCLKEN,
153
.devid = SA1111_DEVID_SSP,
154
},
155
{
156
.offset = SA1111_KBD,
157
.skpcr_mask = SKPCR_PTCLKEN,
158
.devid = SA1111_DEVID_PS2,
159
.irq = {
160
IRQ_TPRXINT,
161
IRQ_TPTXINT
162
},
163
},
164
{
165
.offset = SA1111_MSE,
166
.skpcr_mask = SKPCR_PMCLKEN,
167
.devid = SA1111_DEVID_PS2,
168
.irq = {
169
IRQ_MSRXINT,
170
IRQ_MSTXINT
171
},
172
},
173
{
174
.offset = 0x1800,
175
.skpcr_mask = 0,
176
.devid = SA1111_DEVID_PCMCIA,
177
.irq = {
178
IRQ_S0_READY_NINT,
179
IRQ_S0_CD_VALID,
180
IRQ_S0_BVD1_STSCHG,
181
IRQ_S1_READY_NINT,
182
IRQ_S1_CD_VALID,
183
IRQ_S1_BVD1_STSCHG,
184
},
185
},
186
};
187
188
/*
189
* SA1111 interrupt support. Since clearing an IRQ while there are
190
* active IRQs causes the interrupt output to pulse, the upper levels
191
* will call us again if there are more interrupts to process.
192
*/
193
static void
194
sa1111_irq_handler(unsigned int irq, struct irq_desc *desc)
195
{
196
unsigned int stat0, stat1, i;
197
struct sa1111 *sachip = irq_get_handler_data(irq);
198
void __iomem *mapbase = sachip->base + SA1111_INTC;
199
200
stat0 = sa1111_readl(mapbase + SA1111_INTSTATCLR0);
201
stat1 = sa1111_readl(mapbase + SA1111_INTSTATCLR1);
202
203
sa1111_writel(stat0, mapbase + SA1111_INTSTATCLR0);
204
205
desc->irq_data.chip->irq_ack(&desc->irq_data);
206
207
sa1111_writel(stat1, mapbase + SA1111_INTSTATCLR1);
208
209
if (stat0 == 0 && stat1 == 0) {
210
do_bad_IRQ(irq, desc);
211
return;
212
}
213
214
for (i = 0; stat0; i++, stat0 >>= 1)
215
if (stat0 & 1)
216
generic_handle_irq(i + sachip->irq_base);
217
218
for (i = 32; stat1; i++, stat1 >>= 1)
219
if (stat1 & 1)
220
generic_handle_irq(i + sachip->irq_base);
221
222
/* For level-based interrupts */
223
desc->irq_data.chip->irq_unmask(&desc->irq_data);
224
}
225
226
#define SA1111_IRQMASK_LO(x) (1 << (x - sachip->irq_base))
227
#define SA1111_IRQMASK_HI(x) (1 << (x - sachip->irq_base - 32))
228
229
static void sa1111_ack_irq(struct irq_data *d)
230
{
231
}
232
233
static void sa1111_mask_lowirq(struct irq_data *d)
234
{
235
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
236
void __iomem *mapbase = sachip->base + SA1111_INTC;
237
unsigned long ie0;
238
239
ie0 = sa1111_readl(mapbase + SA1111_INTEN0);
240
ie0 &= ~SA1111_IRQMASK_LO(d->irq);
241
writel(ie0, mapbase + SA1111_INTEN0);
242
}
243
244
static void sa1111_unmask_lowirq(struct irq_data *d)
245
{
246
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
247
void __iomem *mapbase = sachip->base + SA1111_INTC;
248
unsigned long ie0;
249
250
ie0 = sa1111_readl(mapbase + SA1111_INTEN0);
251
ie0 |= SA1111_IRQMASK_LO(d->irq);
252
sa1111_writel(ie0, mapbase + SA1111_INTEN0);
253
}
254
255
/*
256
* Attempt to re-trigger the interrupt. The SA1111 contains a register
257
* (INTSET) which claims to do this. However, in practice no amount of
258
* manipulation of INTEN and INTSET guarantees that the interrupt will
259
* be triggered. In fact, its very difficult, if not impossible to get
260
* INTSET to re-trigger the interrupt.
261
*/
262
static int sa1111_retrigger_lowirq(struct irq_data *d)
263
{
264
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
265
void __iomem *mapbase = sachip->base + SA1111_INTC;
266
unsigned int mask = SA1111_IRQMASK_LO(d->irq);
267
unsigned long ip0;
268
int i;
269
270
ip0 = sa1111_readl(mapbase + SA1111_INTPOL0);
271
for (i = 0; i < 8; i++) {
272
sa1111_writel(ip0 ^ mask, mapbase + SA1111_INTPOL0);
273
sa1111_writel(ip0, mapbase + SA1111_INTPOL0);
274
if (sa1111_readl(mapbase + SA1111_INTSTATCLR0) & mask)
275
break;
276
}
277
278
if (i == 8)
279
printk(KERN_ERR "Danger Will Robinson: failed to "
280
"re-trigger IRQ%d\n", d->irq);
281
return i == 8 ? -1 : 0;
282
}
283
284
static int sa1111_type_lowirq(struct irq_data *d, unsigned int flags)
285
{
286
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
287
void __iomem *mapbase = sachip->base + SA1111_INTC;
288
unsigned int mask = SA1111_IRQMASK_LO(d->irq);
289
unsigned long ip0;
290
291
if (flags == IRQ_TYPE_PROBE)
292
return 0;
293
294
if ((!(flags & IRQ_TYPE_EDGE_RISING) ^ !(flags & IRQ_TYPE_EDGE_FALLING)) == 0)
295
return -EINVAL;
296
297
ip0 = sa1111_readl(mapbase + SA1111_INTPOL0);
298
if (flags & IRQ_TYPE_EDGE_RISING)
299
ip0 &= ~mask;
300
else
301
ip0 |= mask;
302
sa1111_writel(ip0, mapbase + SA1111_INTPOL0);
303
sa1111_writel(ip0, mapbase + SA1111_WAKEPOL0);
304
305
return 0;
306
}
307
308
static int sa1111_wake_lowirq(struct irq_data *d, unsigned int on)
309
{
310
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
311
void __iomem *mapbase = sachip->base + SA1111_INTC;
312
unsigned int mask = SA1111_IRQMASK_LO(d->irq);
313
unsigned long we0;
314
315
we0 = sa1111_readl(mapbase + SA1111_WAKEEN0);
316
if (on)
317
we0 |= mask;
318
else
319
we0 &= ~mask;
320
sa1111_writel(we0, mapbase + SA1111_WAKEEN0);
321
322
return 0;
323
}
324
325
static struct irq_chip sa1111_low_chip = {
326
.name = "SA1111-l",
327
.irq_ack = sa1111_ack_irq,
328
.irq_mask = sa1111_mask_lowirq,
329
.irq_unmask = sa1111_unmask_lowirq,
330
.irq_retrigger = sa1111_retrigger_lowirq,
331
.irq_set_type = sa1111_type_lowirq,
332
.irq_set_wake = sa1111_wake_lowirq,
333
};
334
335
static void sa1111_mask_highirq(struct irq_data *d)
336
{
337
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
338
void __iomem *mapbase = sachip->base + SA1111_INTC;
339
unsigned long ie1;
340
341
ie1 = sa1111_readl(mapbase + SA1111_INTEN1);
342
ie1 &= ~SA1111_IRQMASK_HI(d->irq);
343
sa1111_writel(ie1, mapbase + SA1111_INTEN1);
344
}
345
346
static void sa1111_unmask_highirq(struct irq_data *d)
347
{
348
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
349
void __iomem *mapbase = sachip->base + SA1111_INTC;
350
unsigned long ie1;
351
352
ie1 = sa1111_readl(mapbase + SA1111_INTEN1);
353
ie1 |= SA1111_IRQMASK_HI(d->irq);
354
sa1111_writel(ie1, mapbase + SA1111_INTEN1);
355
}
356
357
/*
358
* Attempt to re-trigger the interrupt. The SA1111 contains a register
359
* (INTSET) which claims to do this. However, in practice no amount of
360
* manipulation of INTEN and INTSET guarantees that the interrupt will
361
* be triggered. In fact, its very difficult, if not impossible to get
362
* INTSET to re-trigger the interrupt.
363
*/
364
static int sa1111_retrigger_highirq(struct irq_data *d)
365
{
366
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
367
void __iomem *mapbase = sachip->base + SA1111_INTC;
368
unsigned int mask = SA1111_IRQMASK_HI(d->irq);
369
unsigned long ip1;
370
int i;
371
372
ip1 = sa1111_readl(mapbase + SA1111_INTPOL1);
373
for (i = 0; i < 8; i++) {
374
sa1111_writel(ip1 ^ mask, mapbase + SA1111_INTPOL1);
375
sa1111_writel(ip1, mapbase + SA1111_INTPOL1);
376
if (sa1111_readl(mapbase + SA1111_INTSTATCLR1) & mask)
377
break;
378
}
379
380
if (i == 8)
381
printk(KERN_ERR "Danger Will Robinson: failed to "
382
"re-trigger IRQ%d\n", d->irq);
383
return i == 8 ? -1 : 0;
384
}
385
386
static int sa1111_type_highirq(struct irq_data *d, unsigned int flags)
387
{
388
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
389
void __iomem *mapbase = sachip->base + SA1111_INTC;
390
unsigned int mask = SA1111_IRQMASK_HI(d->irq);
391
unsigned long ip1;
392
393
if (flags == IRQ_TYPE_PROBE)
394
return 0;
395
396
if ((!(flags & IRQ_TYPE_EDGE_RISING) ^ !(flags & IRQ_TYPE_EDGE_FALLING)) == 0)
397
return -EINVAL;
398
399
ip1 = sa1111_readl(mapbase + SA1111_INTPOL1);
400
if (flags & IRQ_TYPE_EDGE_RISING)
401
ip1 &= ~mask;
402
else
403
ip1 |= mask;
404
sa1111_writel(ip1, mapbase + SA1111_INTPOL1);
405
sa1111_writel(ip1, mapbase + SA1111_WAKEPOL1);
406
407
return 0;
408
}
409
410
static int sa1111_wake_highirq(struct irq_data *d, unsigned int on)
411
{
412
struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
413
void __iomem *mapbase = sachip->base + SA1111_INTC;
414
unsigned int mask = SA1111_IRQMASK_HI(d->irq);
415
unsigned long we1;
416
417
we1 = sa1111_readl(mapbase + SA1111_WAKEEN1);
418
if (on)
419
we1 |= mask;
420
else
421
we1 &= ~mask;
422
sa1111_writel(we1, mapbase + SA1111_WAKEEN1);
423
424
return 0;
425
}
426
427
static struct irq_chip sa1111_high_chip = {
428
.name = "SA1111-h",
429
.irq_ack = sa1111_ack_irq,
430
.irq_mask = sa1111_mask_highirq,
431
.irq_unmask = sa1111_unmask_highirq,
432
.irq_retrigger = sa1111_retrigger_highirq,
433
.irq_set_type = sa1111_type_highirq,
434
.irq_set_wake = sa1111_wake_highirq,
435
};
436
437
static void sa1111_setup_irq(struct sa1111 *sachip)
438
{
439
void __iomem *irqbase = sachip->base + SA1111_INTC;
440
unsigned int irq;
441
442
/*
443
* We're guaranteed that this region hasn't been taken.
444
*/
445
request_mem_region(sachip->phys + SA1111_INTC, 512, "irq");
446
447
/* disable all IRQs */
448
sa1111_writel(0, irqbase + SA1111_INTEN0);
449
sa1111_writel(0, irqbase + SA1111_INTEN1);
450
sa1111_writel(0, irqbase + SA1111_WAKEEN0);
451
sa1111_writel(0, irqbase + SA1111_WAKEEN1);
452
453
/*
454
* detect on rising edge. Note: Feb 2001 Errata for SA1111
455
* specifies that S0ReadyInt and S1ReadyInt should be '1'.
456
*/
457
sa1111_writel(0, irqbase + SA1111_INTPOL0);
458
sa1111_writel(SA1111_IRQMASK_HI(IRQ_S0_READY_NINT) |
459
SA1111_IRQMASK_HI(IRQ_S1_READY_NINT),
460
irqbase + SA1111_INTPOL1);
461
462
/* clear all IRQs */
463
sa1111_writel(~0, irqbase + SA1111_INTSTATCLR0);
464
sa1111_writel(~0, irqbase + SA1111_INTSTATCLR1);
465
466
for (irq = IRQ_GPAIN0; irq <= SSPROR; irq++) {
467
irq_set_chip_and_handler(irq, &sa1111_low_chip,
468
handle_edge_irq);
469
irq_set_chip_data(irq, sachip);
470
set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
471
}
472
473
for (irq = AUDXMTDMADONEA; irq <= IRQ_S1_BVD1_STSCHG; irq++) {
474
irq_set_chip_and_handler(irq, &sa1111_high_chip,
475
handle_edge_irq);
476
irq_set_chip_data(irq, sachip);
477
set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
478
}
479
480
/*
481
* Register SA1111 interrupt
482
*/
483
irq_set_irq_type(sachip->irq, IRQ_TYPE_EDGE_RISING);
484
irq_set_handler_data(sachip->irq, sachip);
485
irq_set_chained_handler(sachip->irq, sa1111_irq_handler);
486
}
487
488
/*
489
* Bring the SA1111 out of reset. This requires a set procedure:
490
* 1. nRESET asserted (by hardware)
491
* 2. CLK turned on from SA1110
492
* 3. nRESET deasserted
493
* 4. VCO turned on, PLL_BYPASS turned off
494
* 5. Wait lock time, then assert RCLKEn
495
* 7. PCR set to allow clocking of individual functions
496
*
497
* Until we've done this, the only registers we can access are:
498
* SBI_SKCR
499
* SBI_SMCR
500
* SBI_SKID
501
*/
502
static void sa1111_wake(struct sa1111 *sachip)
503
{
504
unsigned long flags, r;
505
506
spin_lock_irqsave(&sachip->lock, flags);
507
508
clk_enable(sachip->clk);
509
510
/*
511
* Turn VCO on, and disable PLL Bypass.
512
*/
513
r = sa1111_readl(sachip->base + SA1111_SKCR);
514
r &= ~SKCR_VCO_OFF;
515
sa1111_writel(r, sachip->base + SA1111_SKCR);
516
r |= SKCR_PLL_BYPASS | SKCR_OE_EN;
517
sa1111_writel(r, sachip->base + SA1111_SKCR);
518
519
/*
520
* Wait lock time. SA1111 manual _doesn't_
521
* specify a figure for this! We choose 100us.
522
*/
523
udelay(100);
524
525
/*
526
* Enable RCLK. We also ensure that RDYEN is set.
527
*/
528
r |= SKCR_RCLKEN | SKCR_RDYEN;
529
sa1111_writel(r, sachip->base + SA1111_SKCR);
530
531
/*
532
* Wait 14 RCLK cycles for the chip to finish coming out
533
* of reset. (RCLK=24MHz). This is 590ns.
534
*/
535
udelay(1);
536
537
/*
538
* Ensure all clocks are initially off.
539
*/
540
sa1111_writel(0, sachip->base + SA1111_SKPCR);
541
542
spin_unlock_irqrestore(&sachip->lock, flags);
543
}
544
545
#ifdef CONFIG_ARCH_SA1100
546
547
static u32 sa1111_dma_mask[] = {
548
~0,
549
~(1 << 20),
550
~(1 << 23),
551
~(1 << 24),
552
~(1 << 25),
553
~(1 << 20),
554
~(1 << 20),
555
0,
556
};
557
558
/*
559
* Configure the SA1111 shared memory controller.
560
*/
561
void
562
sa1111_configure_smc(struct sa1111 *sachip, int sdram, unsigned int drac,
563
unsigned int cas_latency)
564
{
565
unsigned int smcr = SMCR_DTIM | SMCR_MBGE | FInsrt(drac, SMCR_DRAC);
566
567
if (cas_latency == 3)
568
smcr |= SMCR_CLAT;
569
570
sa1111_writel(smcr, sachip->base + SA1111_SMCR);
571
572
/*
573
* Now clear the bits in the DMA mask to work around the SA1111
574
* DMA erratum (Intel StrongARM SA-1111 Microprocessor Companion
575
* Chip Specification Update, June 2000, Erratum #7).
576
*/
577
if (sachip->dev->dma_mask)
578
*sachip->dev->dma_mask &= sa1111_dma_mask[drac >> 2];
579
580
sachip->dev->coherent_dma_mask &= sa1111_dma_mask[drac >> 2];
581
}
582
583
#endif
584
585
static void sa1111_dev_release(struct device *_dev)
586
{
587
struct sa1111_dev *dev = SA1111_DEV(_dev);
588
589
release_resource(&dev->res);
590
kfree(dev);
591
}
592
593
static int
594
sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
595
struct sa1111_dev_info *info)
596
{
597
struct sa1111_dev *dev;
598
int ret;
599
600
dev = kzalloc(sizeof(struct sa1111_dev), GFP_KERNEL);
601
if (!dev) {
602
ret = -ENOMEM;
603
goto out;
604
}
605
606
dev_set_name(&dev->dev, "%4.4lx", info->offset);
607
dev->devid = info->devid;
608
dev->dev.parent = sachip->dev;
609
dev->dev.bus = &sa1111_bus_type;
610
dev->dev.release = sa1111_dev_release;
611
dev->dev.coherent_dma_mask = sachip->dev->coherent_dma_mask;
612
dev->res.start = sachip->phys + info->offset;
613
dev->res.end = dev->res.start + 511;
614
dev->res.name = dev_name(&dev->dev);
615
dev->res.flags = IORESOURCE_MEM;
616
dev->mapbase = sachip->base + info->offset;
617
dev->skpcr_mask = info->skpcr_mask;
618
memmove(dev->irq, info->irq, sizeof(dev->irq));
619
620
ret = request_resource(parent, &dev->res);
621
if (ret) {
622
printk("SA1111: failed to allocate resource for %s\n",
623
dev->res.name);
624
dev_set_name(&dev->dev, NULL);
625
kfree(dev);
626
goto out;
627
}
628
629
630
ret = device_register(&dev->dev);
631
if (ret) {
632
release_resource(&dev->res);
633
kfree(dev);
634
goto out;
635
}
636
637
#ifdef CONFIG_DMABOUNCE
638
/*
639
* If the parent device has a DMA mask associated with it,
640
* propagate it down to the children.
641
*/
642
if (sachip->dev->dma_mask) {
643
dev->dma_mask = *sachip->dev->dma_mask;
644
dev->dev.dma_mask = &dev->dma_mask;
645
646
if (dev->dma_mask != 0xffffffffUL) {
647
ret = dmabounce_register_dev(&dev->dev, 1024, 4096);
648
if (ret) {
649
dev_err(&dev->dev, "SA1111: Failed to register"
650
" with dmabounce\n");
651
device_unregister(&dev->dev);
652
}
653
}
654
}
655
#endif
656
657
out:
658
return ret;
659
}
660
661
/**
662
* sa1111_probe - probe for a single SA1111 chip.
663
* @phys_addr: physical address of device.
664
*
665
* Probe for a SA1111 chip. This must be called
666
* before any other SA1111-specific code.
667
*
668
* Returns:
669
* %-ENODEV device not found.
670
* %-EBUSY physical address already marked in-use.
671
* %0 successful.
672
*/
673
static int __devinit
674
__sa1111_probe(struct device *me, struct resource *mem, int irq)
675
{
676
struct sa1111 *sachip;
677
unsigned long id;
678
unsigned int has_devs;
679
int i, ret = -ENODEV;
680
681
sachip = kzalloc(sizeof(struct sa1111), GFP_KERNEL);
682
if (!sachip)
683
return -ENOMEM;
684
685
sachip->clk = clk_get(me, "SA1111_CLK");
686
if (IS_ERR(sachip->clk)) {
687
ret = PTR_ERR(sachip->clk);
688
goto err_free;
689
}
690
691
spin_lock_init(&sachip->lock);
692
693
sachip->dev = me;
694
dev_set_drvdata(sachip->dev, sachip);
695
696
sachip->phys = mem->start;
697
sachip->irq = irq;
698
699
/*
700
* Map the whole region. This also maps the
701
* registers for our children.
702
*/
703
sachip->base = ioremap(mem->start, PAGE_SIZE * 2);
704
if (!sachip->base) {
705
ret = -ENOMEM;
706
goto err_clkput;
707
}
708
709
/*
710
* Probe for the chip. Only touch the SBI registers.
711
*/
712
id = sa1111_readl(sachip->base + SA1111_SKID);
713
if ((id & SKID_ID_MASK) != SKID_SA1111_ID) {
714
printk(KERN_DEBUG "SA1111 not detected: ID = %08lx\n", id);
715
ret = -ENODEV;
716
goto err_unmap;
717
}
718
719
printk(KERN_INFO "SA1111 Microprocessor Companion Chip: "
720
"silicon revision %lx, metal revision %lx\n",
721
(id & SKID_SIREV_MASK)>>4, (id & SKID_MTREV_MASK));
722
723
/*
724
* We found it. Wake the chip up, and initialise.
725
*/
726
sa1111_wake(sachip);
727
728
#ifdef CONFIG_ARCH_SA1100
729
{
730
unsigned int val;
731
732
/*
733
* The SDRAM configuration of the SA1110 and the SA1111 must
734
* match. This is very important to ensure that SA1111 accesses
735
* don't corrupt the SDRAM. Note that this ungates the SA1111's
736
* MBGNT signal, so we must have called sa1110_mb_disable()
737
* beforehand.
738
*/
739
sa1111_configure_smc(sachip, 1,
740
FExtr(MDCNFG, MDCNFG_SA1110_DRAC0),
741
FExtr(MDCNFG, MDCNFG_SA1110_TDL0));
742
743
/*
744
* We only need to turn on DCLK whenever we want to use the
745
* DMA. It can otherwise be held firmly in the off position.
746
* (currently, we always enable it.)
747
*/
748
val = sa1111_readl(sachip->base + SA1111_SKPCR);
749
sa1111_writel(val | SKPCR_DCLKEN, sachip->base + SA1111_SKPCR);
750
751
/*
752
* Enable the SA1110 memory bus request and grant signals.
753
*/
754
sa1110_mb_enable();
755
}
756
#endif
757
758
/*
759
* The interrupt controller must be initialised before any
760
* other device to ensure that the interrupts are available.
761
*/
762
if (sachip->irq != NO_IRQ)
763
sa1111_setup_irq(sachip);
764
765
g_sa1111 = sachip;
766
767
has_devs = ~0;
768
if (machine_is_assabet() || machine_is_jornada720() ||
769
machine_is_badge4())
770
has_devs &= ~(1 << 4);
771
else
772
has_devs &= ~(1 << 1);
773
774
for (i = 0; i < ARRAY_SIZE(sa1111_devices); i++)
775
if (has_devs & (1 << i))
776
sa1111_init_one_child(sachip, mem, &sa1111_devices[i]);
777
778
return 0;
779
780
err_unmap:
781
iounmap(sachip->base);
782
err_clkput:
783
clk_put(sachip->clk);
784
err_free:
785
kfree(sachip);
786
return ret;
787
}
788
789
static int sa1111_remove_one(struct device *dev, void *data)
790
{
791
device_unregister(dev);
792
return 0;
793
}
794
795
static void __sa1111_remove(struct sa1111 *sachip)
796
{
797
void __iomem *irqbase = sachip->base + SA1111_INTC;
798
799
device_for_each_child(sachip->dev, NULL, sa1111_remove_one);
800
801
/* disable all IRQs */
802
sa1111_writel(0, irqbase + SA1111_INTEN0);
803
sa1111_writel(0, irqbase + SA1111_INTEN1);
804
sa1111_writel(0, irqbase + SA1111_WAKEEN0);
805
sa1111_writel(0, irqbase + SA1111_WAKEEN1);
806
807
clk_disable(sachip->clk);
808
809
if (sachip->irq != NO_IRQ) {
810
irq_set_chained_handler(sachip->irq, NULL);
811
irq_set_handler_data(sachip->irq, NULL);
812
813
release_mem_region(sachip->phys + SA1111_INTC, 512);
814
}
815
816
iounmap(sachip->base);
817
clk_put(sachip->clk);
818
kfree(sachip);
819
}
820
821
/*
822
* According to the "Intel StrongARM SA-1111 Microprocessor Companion
823
* Chip Specification Update" (June 2000), erratum #7, there is a
824
* significant bug in the SA1111 SDRAM shared memory controller. If
825
* an access to a region of memory above 1MB relative to the bank base,
826
* it is important that address bit 10 _NOT_ be asserted. Depending
827
* on the configuration of the RAM, bit 10 may correspond to one
828
* of several different (processor-relative) address bits.
829
*
830
* This routine only identifies whether or not a given DMA address
831
* is susceptible to the bug.
832
*
833
* This should only get called for sa1111_device types due to the
834
* way we configure our device dma_masks.
835
*/
836
int dma_needs_bounce(struct device *dev, dma_addr_t addr, size_t size)
837
{
838
/*
839
* Section 4.6 of the "Intel StrongARM SA-1111 Development Module
840
* User's Guide" mentions that jumpers R51 and R52 control the
841
* target of SA-1111 DMA (either SDRAM bank 0 on Assabet, or
842
* SDRAM bank 1 on Neponset). The default configuration selects
843
* Assabet, so any address in bank 1 is necessarily invalid.
844
*/
845
return ((machine_is_assabet() || machine_is_pfs168()) &&
846
(addr >= 0xc8000000 || (addr + size) >= 0xc8000000));
847
}
848
849
struct sa1111_save_data {
850
unsigned int skcr;
851
unsigned int skpcr;
852
unsigned int skcdr;
853
unsigned char skaud;
854
unsigned char skpwm0;
855
unsigned char skpwm1;
856
857
/*
858
* Interrupt controller
859
*/
860
unsigned int intpol0;
861
unsigned int intpol1;
862
unsigned int inten0;
863
unsigned int inten1;
864
unsigned int wakepol0;
865
unsigned int wakepol1;
866
unsigned int wakeen0;
867
unsigned int wakeen1;
868
};
869
870
#ifdef CONFIG_PM
871
872
static int sa1111_suspend(struct platform_device *dev, pm_message_t state)
873
{
874
struct sa1111 *sachip = platform_get_drvdata(dev);
875
struct sa1111_save_data *save;
876
unsigned long flags;
877
unsigned int val;
878
void __iomem *base;
879
880
save = kmalloc(sizeof(struct sa1111_save_data), GFP_KERNEL);
881
if (!save)
882
return -ENOMEM;
883
sachip->saved_state = save;
884
885
spin_lock_irqsave(&sachip->lock, flags);
886
887
/*
888
* Save state.
889
*/
890
base = sachip->base;
891
save->skcr = sa1111_readl(base + SA1111_SKCR);
892
save->skpcr = sa1111_readl(base + SA1111_SKPCR);
893
save->skcdr = sa1111_readl(base + SA1111_SKCDR);
894
save->skaud = sa1111_readl(base + SA1111_SKAUD);
895
save->skpwm0 = sa1111_readl(base + SA1111_SKPWM0);
896
save->skpwm1 = sa1111_readl(base + SA1111_SKPWM1);
897
898
base = sachip->base + SA1111_INTC;
899
save->intpol0 = sa1111_readl(base + SA1111_INTPOL0);
900
save->intpol1 = sa1111_readl(base + SA1111_INTPOL1);
901
save->inten0 = sa1111_readl(base + SA1111_INTEN0);
902
save->inten1 = sa1111_readl(base + SA1111_INTEN1);
903
save->wakepol0 = sa1111_readl(base + SA1111_WAKEPOL0);
904
save->wakepol1 = sa1111_readl(base + SA1111_WAKEPOL1);
905
save->wakeen0 = sa1111_readl(base + SA1111_WAKEEN0);
906
save->wakeen1 = sa1111_readl(base + SA1111_WAKEEN1);
907
908
/*
909
* Disable.
910
*/
911
val = sa1111_readl(sachip->base + SA1111_SKCR);
912
sa1111_writel(val | SKCR_SLEEP, sachip->base + SA1111_SKCR);
913
sa1111_writel(0, sachip->base + SA1111_SKPWM0);
914
sa1111_writel(0, sachip->base + SA1111_SKPWM1);
915
916
clk_disable(sachip->clk);
917
918
spin_unlock_irqrestore(&sachip->lock, flags);
919
920
return 0;
921
}
922
923
/*
924
* sa1111_resume - Restore the SA1111 device state.
925
* @dev: device to restore
926
*
927
* Restore the general state of the SA1111; clock control and
928
* interrupt controller. Other parts of the SA1111 must be
929
* restored by their respective drivers, and must be called
930
* via LDM after this function.
931
*/
932
static int sa1111_resume(struct platform_device *dev)
933
{
934
struct sa1111 *sachip = platform_get_drvdata(dev);
935
struct sa1111_save_data *save;
936
unsigned long flags, id;
937
void __iomem *base;
938
939
save = sachip->saved_state;
940
if (!save)
941
return 0;
942
943
/*
944
* Ensure that the SA1111 is still here.
945
* FIXME: shouldn't do this here.
946
*/
947
id = sa1111_readl(sachip->base + SA1111_SKID);
948
if ((id & SKID_ID_MASK) != SKID_SA1111_ID) {
949
__sa1111_remove(sachip);
950
platform_set_drvdata(dev, NULL);
951
kfree(save);
952
return 0;
953
}
954
955
/*
956
* First of all, wake up the chip.
957
*/
958
sa1111_wake(sachip);
959
960
/*
961
* Only lock for write ops. Also, sa1111_wake must be called with
962
* released spinlock!
963
*/
964
spin_lock_irqsave(&sachip->lock, flags);
965
966
sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0);
967
sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1);
968
969
base = sachip->base;
970
sa1111_writel(save->skcr, base + SA1111_SKCR);
971
sa1111_writel(save->skpcr, base + SA1111_SKPCR);
972
sa1111_writel(save->skcdr, base + SA1111_SKCDR);
973
sa1111_writel(save->skaud, base + SA1111_SKAUD);
974
sa1111_writel(save->skpwm0, base + SA1111_SKPWM0);
975
sa1111_writel(save->skpwm1, base + SA1111_SKPWM1);
976
977
base = sachip->base + SA1111_INTC;
978
sa1111_writel(save->intpol0, base + SA1111_INTPOL0);
979
sa1111_writel(save->intpol1, base + SA1111_INTPOL1);
980
sa1111_writel(save->inten0, base + SA1111_INTEN0);
981
sa1111_writel(save->inten1, base + SA1111_INTEN1);
982
sa1111_writel(save->wakepol0, base + SA1111_WAKEPOL0);
983
sa1111_writel(save->wakepol1, base + SA1111_WAKEPOL1);
984
sa1111_writel(save->wakeen0, base + SA1111_WAKEEN0);
985
sa1111_writel(save->wakeen1, base + SA1111_WAKEEN1);
986
987
spin_unlock_irqrestore(&sachip->lock, flags);
988
989
sachip->saved_state = NULL;
990
kfree(save);
991
992
return 0;
993
}
994
995
#else
996
#define sa1111_suspend NULL
997
#define sa1111_resume NULL
998
#endif
999
1000
static int __devinit sa1111_probe(struct platform_device *pdev)
1001
{
1002
struct resource *mem;
1003
int irq;
1004
1005
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1006
if (!mem)
1007
return -EINVAL;
1008
irq = platform_get_irq(pdev, 0);
1009
if (irq < 0)
1010
return -ENXIO;
1011
1012
return __sa1111_probe(&pdev->dev, mem, irq);
1013
}
1014
1015
static int sa1111_remove(struct platform_device *pdev)
1016
{
1017
struct sa1111 *sachip = platform_get_drvdata(pdev);
1018
1019
if (sachip) {
1020
#ifdef CONFIG_PM
1021
kfree(sachip->saved_state);
1022
sachip->saved_state = NULL;
1023
#endif
1024
__sa1111_remove(sachip);
1025
platform_set_drvdata(pdev, NULL);
1026
}
1027
1028
return 0;
1029
}
1030
1031
/*
1032
* Not sure if this should be on the system bus or not yet.
1033
* We really want some way to register a system device at
1034
* the per-machine level, and then have this driver pick
1035
* up the registered devices.
1036
*
1037
* We also need to handle the SDRAM configuration for
1038
* PXA250/SA1110 machine classes.
1039
*/
1040
static struct platform_driver sa1111_device_driver = {
1041
.probe = sa1111_probe,
1042
.remove = sa1111_remove,
1043
.suspend = sa1111_suspend,
1044
.resume = sa1111_resume,
1045
.driver = {
1046
.name = "sa1111",
1047
},
1048
};
1049
1050
/*
1051
* Get the parent device driver (us) structure
1052
* from a child function device
1053
*/
1054
static inline struct sa1111 *sa1111_chip_driver(struct sa1111_dev *sadev)
1055
{
1056
return (struct sa1111 *)dev_get_drvdata(sadev->dev.parent);
1057
}
1058
1059
/*
1060
* The bits in the opdiv field are non-linear.
1061
*/
1062
static unsigned char opdiv_table[] = { 1, 4, 2, 8 };
1063
1064
static unsigned int __sa1111_pll_clock(struct sa1111 *sachip)
1065
{
1066
unsigned int skcdr, fbdiv, ipdiv, opdiv;
1067
1068
skcdr = sa1111_readl(sachip->base + SA1111_SKCDR);
1069
1070
fbdiv = (skcdr & 0x007f) + 2;
1071
ipdiv = ((skcdr & 0x0f80) >> 7) + 2;
1072
opdiv = opdiv_table[(skcdr & 0x3000) >> 12];
1073
1074
return 3686400 * fbdiv / (ipdiv * opdiv);
1075
}
1076
1077
/**
1078
* sa1111_pll_clock - return the current PLL clock frequency.
1079
* @sadev: SA1111 function block
1080
*
1081
* BUG: we should look at SKCR. We also blindly believe that
1082
* the chip is being fed with the 3.6864MHz clock.
1083
*
1084
* Returns the PLL clock in Hz.
1085
*/
1086
unsigned int sa1111_pll_clock(struct sa1111_dev *sadev)
1087
{
1088
struct sa1111 *sachip = sa1111_chip_driver(sadev);
1089
1090
return __sa1111_pll_clock(sachip);
1091
}
1092
EXPORT_SYMBOL(sa1111_pll_clock);
1093
1094
/**
1095
* sa1111_select_audio_mode - select I2S or AC link mode
1096
* @sadev: SA1111 function block
1097
* @mode: One of %SA1111_AUDIO_ACLINK or %SA1111_AUDIO_I2S
1098
*
1099
* Frob the SKCR to select AC Link mode or I2S mode for
1100
* the audio block.
1101
*/
1102
void sa1111_select_audio_mode(struct sa1111_dev *sadev, int mode)
1103
{
1104
struct sa1111 *sachip = sa1111_chip_driver(sadev);
1105
unsigned long flags;
1106
unsigned int val;
1107
1108
spin_lock_irqsave(&sachip->lock, flags);
1109
1110
val = sa1111_readl(sachip->base + SA1111_SKCR);
1111
if (mode == SA1111_AUDIO_I2S) {
1112
val &= ~SKCR_SELAC;
1113
} else {
1114
val |= SKCR_SELAC;
1115
}
1116
sa1111_writel(val, sachip->base + SA1111_SKCR);
1117
1118
spin_unlock_irqrestore(&sachip->lock, flags);
1119
}
1120
EXPORT_SYMBOL(sa1111_select_audio_mode);
1121
1122
/**
1123
* sa1111_set_audio_rate - set the audio sample rate
1124
* @sadev: SA1111 SAC function block
1125
* @rate: sample rate to select
1126
*/
1127
int sa1111_set_audio_rate(struct sa1111_dev *sadev, int rate)
1128
{
1129
struct sa1111 *sachip = sa1111_chip_driver(sadev);
1130
unsigned int div;
1131
1132
if (sadev->devid != SA1111_DEVID_SAC)
1133
return -EINVAL;
1134
1135
div = (__sa1111_pll_clock(sachip) / 256 + rate / 2) / rate;
1136
if (div == 0)
1137
div = 1;
1138
if (div > 128)
1139
div = 128;
1140
1141
sa1111_writel(div - 1, sachip->base + SA1111_SKAUD);
1142
1143
return 0;
1144
}
1145
EXPORT_SYMBOL(sa1111_set_audio_rate);
1146
1147
/**
1148
* sa1111_get_audio_rate - get the audio sample rate
1149
* @sadev: SA1111 SAC function block device
1150
*/
1151
int sa1111_get_audio_rate(struct sa1111_dev *sadev)
1152
{
1153
struct sa1111 *sachip = sa1111_chip_driver(sadev);
1154
unsigned long div;
1155
1156
if (sadev->devid != SA1111_DEVID_SAC)
1157
return -EINVAL;
1158
1159
div = sa1111_readl(sachip->base + SA1111_SKAUD) + 1;
1160
1161
return __sa1111_pll_clock(sachip) / (256 * div);
1162
}
1163
EXPORT_SYMBOL(sa1111_get_audio_rate);
1164
1165
void sa1111_set_io_dir(struct sa1111_dev *sadev,
1166
unsigned int bits, unsigned int dir,
1167
unsigned int sleep_dir)
1168
{
1169
struct sa1111 *sachip = sa1111_chip_driver(sadev);
1170
unsigned long flags;
1171
unsigned int val;
1172
void __iomem *gpio = sachip->base + SA1111_GPIO;
1173
1174
#define MODIFY_BITS(port, mask, dir) \
1175
if (mask) { \
1176
val = sa1111_readl(port); \
1177
val &= ~(mask); \
1178
val |= (dir) & (mask); \
1179
sa1111_writel(val, port); \
1180
}
1181
1182
spin_lock_irqsave(&sachip->lock, flags);
1183
MODIFY_BITS(gpio + SA1111_GPIO_PADDR, bits & 15, dir);
1184
MODIFY_BITS(gpio + SA1111_GPIO_PBDDR, (bits >> 8) & 255, dir >> 8);
1185
MODIFY_BITS(gpio + SA1111_GPIO_PCDDR, (bits >> 16) & 255, dir >> 16);
1186
1187
MODIFY_BITS(gpio + SA1111_GPIO_PASDR, bits & 15, sleep_dir);
1188
MODIFY_BITS(gpio + SA1111_GPIO_PBSDR, (bits >> 8) & 255, sleep_dir >> 8);
1189
MODIFY_BITS(gpio + SA1111_GPIO_PCSDR, (bits >> 16) & 255, sleep_dir >> 16);
1190
spin_unlock_irqrestore(&sachip->lock, flags);
1191
}
1192
EXPORT_SYMBOL(sa1111_set_io_dir);
1193
1194
void sa1111_set_io(struct sa1111_dev *sadev, unsigned int bits, unsigned int v)
1195
{
1196
struct sa1111 *sachip = sa1111_chip_driver(sadev);
1197
unsigned long flags;
1198
unsigned int val;
1199
void __iomem *gpio = sachip->base + SA1111_GPIO;
1200
1201
spin_lock_irqsave(&sachip->lock, flags);
1202
MODIFY_BITS(gpio + SA1111_GPIO_PADWR, bits & 15, v);
1203
MODIFY_BITS(gpio + SA1111_GPIO_PBDWR, (bits >> 8) & 255, v >> 8);
1204
MODIFY_BITS(gpio + SA1111_GPIO_PCDWR, (bits >> 16) & 255, v >> 16);
1205
spin_unlock_irqrestore(&sachip->lock, flags);
1206
}
1207
EXPORT_SYMBOL(sa1111_set_io);
1208
1209
void sa1111_set_sleep_io(struct sa1111_dev *sadev, unsigned int bits, unsigned int v)
1210
{
1211
struct sa1111 *sachip = sa1111_chip_driver(sadev);
1212
unsigned long flags;
1213
unsigned int val;
1214
void __iomem *gpio = sachip->base + SA1111_GPIO;
1215
1216
spin_lock_irqsave(&sachip->lock, flags);
1217
MODIFY_BITS(gpio + SA1111_GPIO_PASSR, bits & 15, v);
1218
MODIFY_BITS(gpio + SA1111_GPIO_PBSSR, (bits >> 8) & 255, v >> 8);
1219
MODIFY_BITS(gpio + SA1111_GPIO_PCSSR, (bits >> 16) & 255, v >> 16);
1220
spin_unlock_irqrestore(&sachip->lock, flags);
1221
}
1222
EXPORT_SYMBOL(sa1111_set_sleep_io);
1223
1224
/*
1225
* Individual device operations.
1226
*/
1227
1228
/**
1229
* sa1111_enable_device - enable an on-chip SA1111 function block
1230
* @sadev: SA1111 function block device to enable
1231
*/
1232
void sa1111_enable_device(struct sa1111_dev *sadev)
1233
{
1234
struct sa1111 *sachip = sa1111_chip_driver(sadev);
1235
unsigned long flags;
1236
unsigned int val;
1237
1238
spin_lock_irqsave(&sachip->lock, flags);
1239
val = sa1111_readl(sachip->base + SA1111_SKPCR);
1240
sa1111_writel(val | sadev->skpcr_mask, sachip->base + SA1111_SKPCR);
1241
spin_unlock_irqrestore(&sachip->lock, flags);
1242
}
1243
EXPORT_SYMBOL(sa1111_enable_device);
1244
1245
/**
1246
* sa1111_disable_device - disable an on-chip SA1111 function block
1247
* @sadev: SA1111 function block device to disable
1248
*/
1249
void sa1111_disable_device(struct sa1111_dev *sadev)
1250
{
1251
struct sa1111 *sachip = sa1111_chip_driver(sadev);
1252
unsigned long flags;
1253
unsigned int val;
1254
1255
spin_lock_irqsave(&sachip->lock, flags);
1256
val = sa1111_readl(sachip->base + SA1111_SKPCR);
1257
sa1111_writel(val & ~sadev->skpcr_mask, sachip->base + SA1111_SKPCR);
1258
spin_unlock_irqrestore(&sachip->lock, flags);
1259
}
1260
EXPORT_SYMBOL(sa1111_disable_device);
1261
1262
/*
1263
* SA1111 "Register Access Bus."
1264
*
1265
* We model this as a regular bus type, and hang devices directly
1266
* off this.
1267
*/
1268
static int sa1111_match(struct device *_dev, struct device_driver *_drv)
1269
{
1270
struct sa1111_dev *dev = SA1111_DEV(_dev);
1271
struct sa1111_driver *drv = SA1111_DRV(_drv);
1272
1273
return dev->devid == drv->devid;
1274
}
1275
1276
static int sa1111_bus_suspend(struct device *dev, pm_message_t state)
1277
{
1278
struct sa1111_dev *sadev = SA1111_DEV(dev);
1279
struct sa1111_driver *drv = SA1111_DRV(dev->driver);
1280
int ret = 0;
1281
1282
if (drv && drv->suspend)
1283
ret = drv->suspend(sadev, state);
1284
return ret;
1285
}
1286
1287
static int sa1111_bus_resume(struct device *dev)
1288
{
1289
struct sa1111_dev *sadev = SA1111_DEV(dev);
1290
struct sa1111_driver *drv = SA1111_DRV(dev->driver);
1291
int ret = 0;
1292
1293
if (drv && drv->resume)
1294
ret = drv->resume(sadev);
1295
return ret;
1296
}
1297
1298
static int sa1111_bus_probe(struct device *dev)
1299
{
1300
struct sa1111_dev *sadev = SA1111_DEV(dev);
1301
struct sa1111_driver *drv = SA1111_DRV(dev->driver);
1302
int ret = -ENODEV;
1303
1304
if (drv->probe)
1305
ret = drv->probe(sadev);
1306
return ret;
1307
}
1308
1309
static int sa1111_bus_remove(struct device *dev)
1310
{
1311
struct sa1111_dev *sadev = SA1111_DEV(dev);
1312
struct sa1111_driver *drv = SA1111_DRV(dev->driver);
1313
int ret = 0;
1314
1315
if (drv->remove)
1316
ret = drv->remove(sadev);
1317
return ret;
1318
}
1319
1320
struct bus_type sa1111_bus_type = {
1321
.name = "sa1111-rab",
1322
.match = sa1111_match,
1323
.probe = sa1111_bus_probe,
1324
.remove = sa1111_bus_remove,
1325
.suspend = sa1111_bus_suspend,
1326
.resume = sa1111_bus_resume,
1327
};
1328
EXPORT_SYMBOL(sa1111_bus_type);
1329
1330
int sa1111_driver_register(struct sa1111_driver *driver)
1331
{
1332
driver->drv.bus = &sa1111_bus_type;
1333
return driver_register(&driver->drv);
1334
}
1335
EXPORT_SYMBOL(sa1111_driver_register);
1336
1337
void sa1111_driver_unregister(struct sa1111_driver *driver)
1338
{
1339
driver_unregister(&driver->drv);
1340
}
1341
EXPORT_SYMBOL(sa1111_driver_unregister);
1342
1343
static int __init sa1111_init(void)
1344
{
1345
int ret = bus_register(&sa1111_bus_type);
1346
if (ret == 0)
1347
platform_driver_register(&sa1111_device_driver);
1348
return ret;
1349
}
1350
1351
static void __exit sa1111_exit(void)
1352
{
1353
platform_driver_unregister(&sa1111_device_driver);
1354
bus_unregister(&sa1111_bus_type);
1355
}
1356
1357
subsys_initcall(sa1111_init);
1358
module_exit(sa1111_exit);
1359
1360
MODULE_DESCRIPTION("Intel Corporation SA1111 core driver");
1361
MODULE_LICENSE("GPL");
1362
1363