Lines Matching refs:sachip
194 static int sa1111_map_irq(struct sa1111 *sachip, irq_hw_number_t hwirq)
196 return irq_create_mapping(sachip->irqdomain, hwirq);
215 struct sa1111 *sachip = irq_desc_get_handler_data(desc);
217 void __iomem *mapbase = sachip->base + SA1111_INTC;
233 irqdomain = sachip->irqdomain;
263 struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
264 void __iomem *mapbase = sachip->base + SA1111_INTC + sa1111_irqbank(d);
274 struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
275 void __iomem *mapbase = sachip->base + SA1111_INTC + sa1111_irqbank(d);
292 struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
293 void __iomem *mapbase = sachip->base + SA1111_INTC + sa1111_irqbank(d);
316 struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
317 void __iomem *mapbase = sachip->base + SA1111_INTC + sa1111_irqbank(d);
339 struct sa1111 *sachip = irq_data_get_irq_chip_data(d);
340 void __iomem *mapbase = sachip->base + SA1111_INTC + sa1111_irqbank(d);
366 struct sa1111 *sachip = d->host_data;
372 irq_set_chip_data(irq, sachip);
384 static int sa1111_setup_irq(struct sa1111 *sachip, unsigned irq_base)
386 void __iomem *irqbase = sachip->base + SA1111_INTC;
392 request_mem_region(sachip->phys + SA1111_INTC, 512, "irq");
396 dev_err(sachip->dev, "unable to allocate %u irqs: %d\n",
403 sachip->irq_base = ret;
424 sachip->irqdomain = irq_domain_add_linear(NULL, SA1111_IRQ_NR,
426 sachip);
427 if (!sachip->irqdomain) {
428 irq_free_descs(sachip->irq_base, SA1111_IRQ_NR);
432 irq_domain_associate_many(sachip->irqdomain,
433 sachip->irq_base + IRQ_GPAIN0,
435 irq_domain_associate_many(sachip->irqdomain,
436 sachip->irq_base + AUDXMTDMADONEA,
443 irq_set_irq_type(sachip->irq, IRQ_TYPE_EDGE_RISING);
444 irq_set_chained_handler_and_data(sachip->irq, sa1111_irq_handler,
445 sachip);
447 dev_info(sachip->dev, "Providing IRQ%u-%u\n",
448 sachip->irq_base, sachip->irq_base + SA1111_IRQ_NR - 1);
453 static void sa1111_remove_irq(struct sa1111 *sachip)
455 struct irq_domain *domain = sachip->irqdomain;
456 void __iomem *irqbase = sachip->base + SA1111_INTC;
465 irq_set_chained_handler_and_data(sachip->irq, NULL, NULL);
470 release_mem_region(sachip->phys + SA1111_INTC, 512);
486 static void __iomem *sa1111_gpio_map_reg(struct sa1111 *sachip, unsigned offset)
488 void __iomem *reg = sachip->base + SA1111_GPIO;
522 struct sa1111 *sachip = gc_to_sa1111(gc);
523 void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
531 struct sa1111 *sachip = gc_to_sa1111(gc);
533 void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
536 spin_lock_irqsave(&sachip->lock, flags);
539 spin_unlock_irqrestore(&sachip->lock, flags);
547 struct sa1111 *sachip = gc_to_sa1111(gc);
549 void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
552 spin_lock_irqsave(&sachip->lock, flags);
557 spin_unlock_irqrestore(&sachip->lock, flags);
564 struct sa1111 *sachip = gc_to_sa1111(gc);
565 void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
573 struct sa1111 *sachip = gc_to_sa1111(gc);
575 void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
578 spin_lock_irqsave(&sachip->lock, flags);
581 spin_unlock_irqrestore(&sachip->lock, flags);
587 struct sa1111 *sachip = gc_to_sa1111(gc);
589 void __iomem *reg = sachip->base + SA1111_GPIO;
595 spin_lock_irqsave(&sachip->lock, flags);
602 spin_unlock_irqrestore(&sachip->lock, flags);
607 struct sa1111 *sachip = gc_to_sa1111(gc);
609 return sa1111_map_irq(sachip, offset);
612 static int sa1111_setup_gpios(struct sa1111 *sachip)
614 sachip->gc.label = "sa1111";
615 sachip->gc.parent = sachip->dev;
616 sachip->gc.owner = THIS_MODULE;
617 sachip->gc.get_direction = sa1111_gpio_get_direction;
618 sachip->gc.direction_input = sa1111_gpio_direction_input;
619 sachip->gc.direction_output = sa1111_gpio_direction_output;
620 sachip->gc.get = sa1111_gpio_get;
621 sachip->gc.set = sa1111_gpio_set;
622 sachip->gc.set_multiple = sa1111_gpio_set_multiple;
623 sachip->gc.to_irq = sa1111_gpio_to_irq;
624 sachip->gc.base = -1;
625 sachip->gc.ngpio = 18;
627 return devm_gpiochip_add_data(sachip->dev, &sachip->gc, sachip);
644 static void sa1111_wake(struct sa1111 *sachip)
648 spin_lock_irqsave(&sachip->lock, flags);
650 clk_enable(sachip->clk);
655 r = readl_relaxed(sachip->base + SA1111_SKCR);
657 writel_relaxed(r, sachip->base + SA1111_SKCR);
659 writel_relaxed(r, sachip->base + SA1111_SKCR);
671 writel_relaxed(r, sachip->base + SA1111_SKCR);
682 writel_relaxed(0, sachip->base + SA1111_SKPCR);
684 spin_unlock_irqrestore(&sachip->lock, flags);
704 sa1111_configure_smc(struct sa1111 *sachip, int sdram, unsigned int drac,
712 writel_relaxed(smcr, sachip->base + SA1111_SMCR);
719 if (sachip->dev->dma_mask)
720 *sachip->dev->dma_mask &= sa1111_dma_mask[drac >> 2];
722 sachip->dev->coherent_dma_mask &= sa1111_dma_mask[drac >> 2];
734 sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
750 dev->dev.parent = sachip->dev;
753 dev->res.start = sachip->phys + info->offset;
757 dev->mapbase = sachip->base + info->offset;
767 if (info->dma && sachip->dev->dma_mask) {
768 dev->dma_mask = *sachip->dev->dma_mask;
770 dev->dev.coherent_dma_mask = sachip->dev->coherent_dma_mask;
775 dev_err(sachip->dev, "failed to allocate resource for %s\n",
809 struct sa1111 *sachip;
817 sachip = devm_kzalloc(me, sizeof(struct sa1111), GFP_KERNEL);
818 if (!sachip)
821 sachip->clk = devm_clk_get(me, "SA1111_CLK");
822 if (IS_ERR(sachip->clk))
823 return PTR_ERR(sachip->clk);
825 ret = clk_prepare(sachip->clk);
829 spin_lock_init(&sachip->lock);
831 sachip->dev = me;
832 dev_set_drvdata(sachip->dev, sachip);
834 sachip->pdata = pd;
835 sachip->phys = mem->start;
836 sachip->irq = irq;
842 sachip->base = ioremap(mem->start, PAGE_SIZE * 2);
843 if (!sachip->base) {
851 id = readl_relaxed(sachip->base + SA1111_SKID);
864 sa1111_wake(sachip);
870 ret = sa1111_setup_irq(sachip, pd->irq_base);
875 ret = sa1111_setup_gpios(sachip);
890 sa1111_configure_smc(sachip, 1,
899 val = readl_relaxed(sachip->base + SA1111_SKPCR);
900 writel_relaxed(val | SKPCR_DCLKEN, sachip->base + SA1111_SKPCR);
909 g_sa1111 = sachip;
917 sa1111_init_one_child(sachip, mem, &sa1111_devices[i]);
922 sa1111_remove_irq(sachip);
924 clk_disable(sachip->clk);
926 iounmap(sachip->base);
928 clk_unprepare(sachip->clk);
943 static void __sa1111_remove(struct sa1111 *sachip)
945 device_for_each_child(sachip->dev, NULL, sa1111_remove_one);
947 sa1111_remove_irq(sachip);
949 clk_disable(sachip->clk);
950 clk_unprepare(sachip->clk);
952 iounmap(sachip->base);
980 struct sa1111 *sachip = dev_get_drvdata(dev);
989 sachip->saved_state = save;
991 spin_lock_irqsave(&sachip->lock, flags);
996 base = sachip->base;
1004 writel_relaxed(0, sachip->base + SA1111_SKPWM0);
1005 writel_relaxed(0, sachip->base + SA1111_SKPWM1);
1007 base = sachip->base + SA1111_INTC;
1020 val = readl_relaxed(sachip->base + SA1111_SKCR);
1021 writel_relaxed(val | SKCR_SLEEP, sachip->base + SA1111_SKCR);
1023 clk_disable(sachip->clk);
1025 spin_unlock_irqrestore(&sachip->lock, flags);
1045 struct sa1111 *sachip = dev_get_drvdata(dev);
1050 save = sachip->saved_state;
1058 id = readl_relaxed(sachip->base + SA1111_SKID);
1060 __sa1111_remove(sachip);
1069 sa1111_wake(sachip);
1080 spin_lock_irqsave(&sachip->lock, flags);
1082 writel_relaxed(0, sachip->base + SA1111_INTC + SA1111_INTEN0);
1083 writel_relaxed(0, sachip->base + SA1111_INTC + SA1111_INTEN1);
1085 base = sachip->base;
1093 base = sachip->base + SA1111_INTC;
1103 spin_unlock_irqrestore(&sachip->lock, flags);
1105 sachip->saved_state = NULL;
1133 struct sa1111 *sachip = platform_get_drvdata(pdev);
1135 if (sachip) {
1137 kfree(sachip->saved_state);
1138 sachip->saved_state = NULL;
1140 __sa1111_remove(sachip);
1184 static unsigned int __sa1111_pll_clock(struct sa1111 *sachip)
1188 skcdr = readl_relaxed(sachip->base + SA1111_SKCDR);
1208 struct sa1111 *sachip = sa1111_chip_driver(sadev);
1210 return __sa1111_pll_clock(sachip);
1224 struct sa1111 *sachip = sa1111_chip_driver(sadev);
1228 spin_lock_irqsave(&sachip->lock, flags);
1230 val = readl_relaxed(sachip->base + SA1111_SKCR);
1236 writel_relaxed(val, sachip->base + SA1111_SKCR);
1238 spin_unlock_irqrestore(&sachip->lock, flags);
1249 struct sa1111 *sachip = sa1111_chip_driver(sadev);
1255 div = (__sa1111_pll_clock(sachip) / 256 + rate / 2) / rate;
1261 writel_relaxed(div - 1, sachip->base + SA1111_SKAUD);
1273 struct sa1111 *sachip = sa1111_chip_driver(sadev);
1279 div = readl_relaxed(sachip->base + SA1111_SKAUD) + 1;
1281 return __sa1111_pll_clock(sachip) / (256 * div);
1295 struct sa1111 *sachip = sa1111_chip_driver(sadev);
1300 if (sachip->pdata && sachip->pdata->enable)
1301 ret = sachip->pdata->enable(sachip->pdata->data, sadev->devid);
1304 spin_lock_irqsave(&sachip->lock, flags);
1305 val = readl_relaxed(sachip->base + SA1111_SKPCR);
1306 writel_relaxed(val | sadev->skpcr_mask, sachip->base + SA1111_SKPCR);
1307 spin_unlock_irqrestore(&sachip->lock, flags);
1319 struct sa1111 *sachip = sa1111_chip_driver(sadev);
1323 spin_lock_irqsave(&sachip->lock, flags);
1324 val = readl_relaxed(sachip->base + SA1111_SKPCR);
1325 writel_relaxed(val & ~sadev->skpcr_mask, sachip->base + SA1111_SKPCR);
1326 spin_unlock_irqrestore(&sachip->lock, flags);
1328 if (sachip->pdata && sachip->pdata->disable)
1329 sachip->pdata->disable(sachip->pdata->data, sadev->devid);
1335 struct sa1111 *sachip = sa1111_chip_driver(sadev);
1338 return sa1111_map_irq(sachip, sadev->hwirq[num]);