Lines Matching refs:sachip

202 	struct sa1111 *sachip = irq_desc_get_handler_data(desc);  in sa1111_irq_handler()  local
203 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_irq_handler()
221 generic_handle_irq(i + sachip->irq_base); in sa1111_irq_handler()
225 generic_handle_irq(i + sachip->irq_base); in sa1111_irq_handler()
231 #define SA1111_IRQMASK_LO(x) (1 << (x - sachip->irq_base))
232 #define SA1111_IRQMASK_HI(x) (1 << (x - sachip->irq_base - 32))
240 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_mask_lowirq() local
241 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_mask_lowirq()
251 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_unmask_lowirq() local
252 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_unmask_lowirq()
269 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_retrigger_lowirq() local
270 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_retrigger_lowirq()
291 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_type_lowirq() local
292 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_type_lowirq()
315 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_wake_lowirq() local
316 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_wake_lowirq()
342 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_mask_highirq() local
343 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_mask_highirq()
353 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_unmask_highirq() local
354 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_unmask_highirq()
371 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_retrigger_highirq() local
372 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_retrigger_highirq()
393 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_type_highirq() local
394 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_type_highirq()
417 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_wake_highirq() local
418 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_wake_highirq()
442 static int sa1111_setup_irq(struct sa1111 *sachip, unsigned irq_base) in sa1111_setup_irq() argument
444 void __iomem *irqbase = sachip->base + SA1111_INTC; in sa1111_setup_irq()
451 request_mem_region(sachip->phys + SA1111_INTC, 512, "irq"); in sa1111_setup_irq()
455 dev_err(sachip->dev, "unable to allocate %u irqs: %d\n", in sa1111_setup_irq()
462 sachip->irq_base = ret; in sa1111_setup_irq()
484 irq = sachip->irq_base + i; in sa1111_setup_irq()
487 irq_set_chip_data(irq, sachip); in sa1111_setup_irq()
492 irq = sachip->irq_base + i; in sa1111_setup_irq()
495 irq_set_chip_data(irq, sachip); in sa1111_setup_irq()
502 irq_set_irq_type(sachip->irq, IRQ_TYPE_EDGE_RISING); in sa1111_setup_irq()
503 irq_set_chained_handler_and_data(sachip->irq, sa1111_irq_handler, in sa1111_setup_irq()
504 sachip); in sa1111_setup_irq()
506 dev_info(sachip->dev, "Providing IRQ%u-%u\n", in sa1111_setup_irq()
507 sachip->irq_base, sachip->irq_base + SA1111_IRQ_NR - 1); in sa1111_setup_irq()
526 static void sa1111_wake(struct sa1111 *sachip) in sa1111_wake() argument
530 spin_lock_irqsave(&sachip->lock, flags); in sa1111_wake()
532 clk_enable(sachip->clk); in sa1111_wake()
537 r = sa1111_readl(sachip->base + SA1111_SKCR); in sa1111_wake()
539 sa1111_writel(r, sachip->base + SA1111_SKCR); in sa1111_wake()
541 sa1111_writel(r, sachip->base + SA1111_SKCR); in sa1111_wake()
553 sa1111_writel(r, sachip->base + SA1111_SKCR); in sa1111_wake()
564 sa1111_writel(0, sachip->base + SA1111_SKPCR); in sa1111_wake()
566 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_wake()
586 sa1111_configure_smc(struct sa1111 *sachip, int sdram, unsigned int drac, in sa1111_configure_smc() argument
594 sa1111_writel(smcr, sachip->base + SA1111_SMCR); in sa1111_configure_smc()
601 if (sachip->dev->dma_mask) in sa1111_configure_smc()
602 *sachip->dev->dma_mask &= sa1111_dma_mask[drac >> 2]; in sa1111_configure_smc()
604 sachip->dev->coherent_dma_mask &= sa1111_dma_mask[drac >> 2]; in sa1111_configure_smc()
616 sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent, in sa1111_init_one_child() argument
632 dev->dev.parent = sachip->dev; in sa1111_init_one_child()
635 dev->res.start = sachip->phys + info->offset; in sa1111_init_one_child()
639 dev->mapbase = sachip->base + info->offset; in sa1111_init_one_child()
643 dev->irq[i] = sachip->irq_base + info->irq[i]; in sa1111_init_one_child()
649 if (info->dma && sachip->dev->dma_mask) { in sa1111_init_one_child()
650 dev->dma_mask = *sachip->dev->dma_mask; in sa1111_init_one_child()
652 dev->dev.coherent_dma_mask = sachip->dev->coherent_dma_mask; in sa1111_init_one_child()
657 dev_err(sachip->dev, "failed to allocate resource for %s\n", in sa1111_init_one_child()
691 struct sa1111 *sachip; in __sa1111_probe() local
699 sachip = kzalloc(sizeof(struct sa1111), GFP_KERNEL); in __sa1111_probe()
700 if (!sachip) in __sa1111_probe()
703 sachip->clk = clk_get(me, "SA1111_CLK"); in __sa1111_probe()
704 if (IS_ERR(sachip->clk)) { in __sa1111_probe()
705 ret = PTR_ERR(sachip->clk); in __sa1111_probe()
709 ret = clk_prepare(sachip->clk); in __sa1111_probe()
713 spin_lock_init(&sachip->lock); in __sa1111_probe()
715 sachip->dev = me; in __sa1111_probe()
716 dev_set_drvdata(sachip->dev, sachip); in __sa1111_probe()
718 sachip->pdata = pd; in __sa1111_probe()
719 sachip->phys = mem->start; in __sa1111_probe()
720 sachip->irq = irq; in __sa1111_probe()
726 sachip->base = ioremap(mem->start, PAGE_SIZE * 2); in __sa1111_probe()
727 if (!sachip->base) { in __sa1111_probe()
735 id = sa1111_readl(sachip->base + SA1111_SKID); in __sa1111_probe()
748 sa1111_wake(sachip); in __sa1111_probe()
754 if (sachip->irq != NO_IRQ) { in __sa1111_probe()
755 ret = sa1111_setup_irq(sachip, pd->irq_base); in __sa1111_probe()
771 sa1111_configure_smc(sachip, 1, in __sa1111_probe()
780 val = sa1111_readl(sachip->base + SA1111_SKPCR); in __sa1111_probe()
781 sa1111_writel(val | SKPCR_DCLKEN, sachip->base + SA1111_SKPCR); in __sa1111_probe()
790 g_sa1111 = sachip; in __sa1111_probe()
798 sa1111_init_one_child(sachip, mem, &sa1111_devices[i]); in __sa1111_probe()
803 iounmap(sachip->base); in __sa1111_probe()
805 clk_unprepare(sachip->clk); in __sa1111_probe()
807 clk_put(sachip->clk); in __sa1111_probe()
809 kfree(sachip); in __sa1111_probe()
822 static void __sa1111_remove(struct sa1111 *sachip) in __sa1111_remove() argument
824 void __iomem *irqbase = sachip->base + SA1111_INTC; in __sa1111_remove()
826 device_for_each_child(sachip->dev, NULL, sa1111_remove_one); in __sa1111_remove()
834 clk_disable(sachip->clk); in __sa1111_remove()
835 clk_unprepare(sachip->clk); in __sa1111_remove()
837 if (sachip->irq != NO_IRQ) { in __sa1111_remove()
838 irq_set_chained_handler_and_data(sachip->irq, NULL, NULL); in __sa1111_remove()
839 irq_free_descs(sachip->irq_base, SA1111_IRQ_NR); in __sa1111_remove()
841 release_mem_region(sachip->phys + SA1111_INTC, 512); in __sa1111_remove()
844 iounmap(sachip->base); in __sa1111_remove()
845 clk_put(sachip->clk); in __sa1111_remove()
846 kfree(sachip); in __sa1111_remove()
874 struct sa1111 *sachip = platform_get_drvdata(dev); in sa1111_suspend() local
883 sachip->saved_state = save; in sa1111_suspend()
885 spin_lock_irqsave(&sachip->lock, flags); in sa1111_suspend()
890 base = sachip->base; in sa1111_suspend()
898 sa1111_writel(0, sachip->base + SA1111_SKPWM0); in sa1111_suspend()
899 sa1111_writel(0, sachip->base + SA1111_SKPWM1); in sa1111_suspend()
901 base = sachip->base + SA1111_INTC; in sa1111_suspend()
914 val = sa1111_readl(sachip->base + SA1111_SKCR); in sa1111_suspend()
915 sa1111_writel(val | SKCR_SLEEP, sachip->base + SA1111_SKCR); in sa1111_suspend()
917 clk_disable(sachip->clk); in sa1111_suspend()
919 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_suspend()
939 struct sa1111 *sachip = platform_get_drvdata(dev); in sa1111_resume() local
944 save = sachip->saved_state; in sa1111_resume()
952 id = sa1111_readl(sachip->base + SA1111_SKID); in sa1111_resume()
954 __sa1111_remove(sachip); in sa1111_resume()
963 sa1111_wake(sachip); in sa1111_resume()
974 spin_lock_irqsave(&sachip->lock, flags); in sa1111_resume()
976 sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0); in sa1111_resume()
977 sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1); in sa1111_resume()
979 base = sachip->base; in sa1111_resume()
987 base = sachip->base + SA1111_INTC; in sa1111_resume()
997 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_resume()
999 sachip->saved_state = NULL; in sa1111_resume()
1027 struct sa1111 *sachip = platform_get_drvdata(pdev); in sa1111_remove() local
1029 if (sachip) { in sa1111_remove()
1031 kfree(sachip->saved_state); in sa1111_remove()
1032 sachip->saved_state = NULL; in sa1111_remove()
1034 __sa1111_remove(sachip); in sa1111_remove()
1074 static unsigned int __sa1111_pll_clock(struct sa1111 *sachip) in __sa1111_pll_clock() argument
1078 skcdr = sa1111_readl(sachip->base + SA1111_SKCDR); in __sa1111_pll_clock()
1098 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_pll_clock() local
1100 return __sa1111_pll_clock(sachip); in sa1111_pll_clock()
1114 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_select_audio_mode() local
1118 spin_lock_irqsave(&sachip->lock, flags); in sa1111_select_audio_mode()
1120 val = sa1111_readl(sachip->base + SA1111_SKCR); in sa1111_select_audio_mode()
1126 sa1111_writel(val, sachip->base + SA1111_SKCR); in sa1111_select_audio_mode()
1128 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_select_audio_mode()
1139 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_set_audio_rate() local
1145 div = (__sa1111_pll_clock(sachip) / 256 + rate / 2) / rate; in sa1111_set_audio_rate()
1151 sa1111_writel(div - 1, sachip->base + SA1111_SKAUD); in sa1111_set_audio_rate()
1163 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_get_audio_rate() local
1169 div = sa1111_readl(sachip->base + SA1111_SKAUD) + 1; in sa1111_get_audio_rate()
1171 return __sa1111_pll_clock(sachip) / (256 * div); in sa1111_get_audio_rate()
1179 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_set_io_dir() local
1182 void __iomem *gpio = sachip->base + SA1111_GPIO; in sa1111_set_io_dir()
1192 spin_lock_irqsave(&sachip->lock, flags); in sa1111_set_io_dir()
1200 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_set_io_dir()
1206 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_set_io() local
1209 void __iomem *gpio = sachip->base + SA1111_GPIO; in sa1111_set_io()
1211 spin_lock_irqsave(&sachip->lock, flags); in sa1111_set_io()
1215 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_set_io()
1221 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_set_sleep_io() local
1224 void __iomem *gpio = sachip->base + SA1111_GPIO; in sa1111_set_sleep_io()
1226 spin_lock_irqsave(&sachip->lock, flags); in sa1111_set_sleep_io()
1230 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_set_sleep_io()
1244 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_enable_device() local
1249 if (sachip->pdata && sachip->pdata->enable) in sa1111_enable_device()
1250 ret = sachip->pdata->enable(sachip->pdata->data, sadev->devid); in sa1111_enable_device()
1253 spin_lock_irqsave(&sachip->lock, flags); in sa1111_enable_device()
1254 val = sa1111_readl(sachip->base + SA1111_SKPCR); in sa1111_enable_device()
1255 sa1111_writel(val | sadev->skpcr_mask, sachip->base + SA1111_SKPCR); in sa1111_enable_device()
1256 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_enable_device()
1268 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_disable_device() local
1272 spin_lock_irqsave(&sachip->lock, flags); in sa1111_disable_device()
1273 val = sa1111_readl(sachip->base + SA1111_SKPCR); in sa1111_disable_device()
1274 sa1111_writel(val & ~sadev->skpcr_mask, sachip->base + SA1111_SKPCR); in sa1111_disable_device()
1275 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_disable_device()
1277 if (sachip->pdata && sachip->pdata->disable) in sa1111_disable_device()
1278 sachip->pdata->disable(sachip->pdata->data, sadev->devid); in sa1111_disable_device()