42
static const struct resource t7l66xb_mmc_resources[] = {
46
.flags = IORESOURCE_MEM,
49
.start = IRQ_T7L66XB_MMC,
50
.end = IRQ_T7L66XB_MMC,
51
.flags = IORESOURCE_IRQ,
41
55
#define SCR_REVID 0x08 /* b Revision ID */
42
56
#define SCR_IMR 0x42 /* b Interrupt Mask */
43
57
#define SCR_DEV_CTL 0xe0 /* b Device control */
84
98
spin_unlock_irqrestore(&t7l66xb->lock, flags);
100
tmio_core_mmc_enable(t7l66xb->scr + 0x200, 0,
101
t7l66xb_mmc_resources[0].start & 0xfffe);
126
static void t7l66xb_mmc_pwr(struct platform_device *mmc, int state)
128
struct platform_device *dev = to_platform_device(mmc->dev.parent);
129
struct t7l66xb *t7l66xb = platform_get_drvdata(dev);
131
tmio_core_mmc_pwr(t7l66xb->scr + 0x200, 0, state);
134
static void t7l66xb_mmc_clk_div(struct platform_device *mmc, int state)
136
struct platform_device *dev = to_platform_device(mmc->dev.parent);
137
struct t7l66xb *t7l66xb = platform_get_drvdata(dev);
139
tmio_core_mmc_clk_div(t7l66xb->scr + 0x200, 0, state);
109
142
/*--------------------------------------------------------------------------*/
111
144
static struct tmio_mmc_data t7166xb_mmc_data = {
112
145
.hclk = 24000000,
115
static const struct resource t7l66xb_mmc_resources[] = {
119
.flags = IORESOURCE_MEM,
124
.flags = IORESOURCE_MEM,
127
.start = IRQ_T7L66XB_MMC,
128
.end = IRQ_T7L66XB_MMC,
129
.flags = IORESOURCE_IRQ,
146
.set_pwr = t7l66xb_mmc_pwr,
147
.set_clk_div = t7l66xb_mmc_clk_div,
133
150
static const struct resource t7l66xb_nand_resources[] = {
182
199
generic_handle_irq(irq_base + i);
185
static void t7l66xb_irq_mask(unsigned int irq)
202
static void t7l66xb_irq_mask(struct irq_data *data)
187
struct t7l66xb *t7l66xb = get_irq_chip_data(irq);
204
struct t7l66xb *t7l66xb = irq_data_get_irq_chip_data(data);
188
205
unsigned long flags;
191
208
spin_lock_irqsave(&t7l66xb->lock, flags);
192
209
imr = tmio_ioread8(t7l66xb->scr + SCR_IMR);
193
imr |= 1 << (irq - t7l66xb->irq_base);
210
imr |= 1 << (data->irq - t7l66xb->irq_base);
194
211
tmio_iowrite8(imr, t7l66xb->scr + SCR_IMR);
195
212
spin_unlock_irqrestore(&t7l66xb->lock, flags);
198
static void t7l66xb_irq_unmask(unsigned int irq)
215
static void t7l66xb_irq_unmask(struct irq_data *data)
200
struct t7l66xb *t7l66xb = get_irq_chip_data(irq);
217
struct t7l66xb *t7l66xb = irq_data_get_irq_chip_data(data);
201
218
unsigned long flags;
204
221
spin_lock_irqsave(&t7l66xb->lock, flags);
205
222
imr = tmio_ioread8(t7l66xb->scr + SCR_IMR);
206
imr &= ~(1 << (irq - t7l66xb->irq_base));
223
imr &= ~(1 << (data->irq - t7l66xb->irq_base));
207
224
tmio_iowrite8(imr, t7l66xb->scr + SCR_IMR);
208
225
spin_unlock_irqrestore(&t7l66xb->lock, flags);
211
228
static struct irq_chip t7l66xb_chip = {
213
.ack = t7l66xb_irq_mask,
214
.mask = t7l66xb_irq_mask,
215
.unmask = t7l66xb_irq_unmask,
230
.irq_ack = t7l66xb_irq_mask,
231
.irq_mask = t7l66xb_irq_mask,
232
.irq_unmask = t7l66xb_irq_unmask,
218
235
/*--------------------------------------------------------------------------*/
327
350
t7l66xb->clk48m = clk_get(&dev->dev, "CLK_CK48M");
328
351
if (IS_ERR(t7l66xb->clk48m)) {
329
352
ret = PTR_ERR(t7l66xb->clk48m);
330
clk_put(t7l66xb->clk32k);
331
353
goto err_clk48m_get;
402
424
ret = pdata->disable(dev);
403
425
clk_disable(t7l66xb->clk48m);
404
426
clk_put(t7l66xb->clk48m);
427
clk_disable(t7l66xb->clk32k);
428
clk_put(t7l66xb->clk32k);
405
429
t7l66xb_detach_irq(dev);
406
430
iounmap(t7l66xb->scr);
407
431
release_resource(&t7l66xb->rscr);