Lines Matching refs:sachip

203 	struct sa1111 *sachip = irq_get_handler_data(irq);  in sa1111_irq_handler()  local
204 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_irq_handler()
222 generic_handle_irq(i + sachip->irq_base); in sa1111_irq_handler()
226 generic_handle_irq(i + sachip->irq_base); in sa1111_irq_handler()
232 #define SA1111_IRQMASK_LO(x) (1 << (x - sachip->irq_base))
233 #define SA1111_IRQMASK_HI(x) (1 << (x - sachip->irq_base - 32))
241 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_mask_lowirq() local
242 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_mask_lowirq()
252 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_unmask_lowirq() local
253 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_unmask_lowirq()
270 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_retrigger_lowirq() local
271 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_retrigger_lowirq()
292 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_type_lowirq() local
293 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_type_lowirq()
316 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_wake_lowirq() local
317 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_wake_lowirq()
343 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_mask_highirq() local
344 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_mask_highirq()
354 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_unmask_highirq() local
355 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_unmask_highirq()
372 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_retrigger_highirq() local
373 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_retrigger_highirq()
394 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_type_highirq() local
395 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_type_highirq()
418 struct sa1111 *sachip = irq_data_get_irq_chip_data(d); in sa1111_wake_highirq() local
419 void __iomem *mapbase = sachip->base + SA1111_INTC; in sa1111_wake_highirq()
443 static int sa1111_setup_irq(struct sa1111 *sachip, unsigned irq_base) in sa1111_setup_irq() argument
445 void __iomem *irqbase = sachip->base + SA1111_INTC; in sa1111_setup_irq()
452 request_mem_region(sachip->phys + SA1111_INTC, 512, "irq"); in sa1111_setup_irq()
456 dev_err(sachip->dev, "unable to allocate %u irqs: %d\n", in sa1111_setup_irq()
463 sachip->irq_base = ret; in sa1111_setup_irq()
485 irq = sachip->irq_base + i; in sa1111_setup_irq()
488 irq_set_chip_data(irq, sachip); in sa1111_setup_irq()
493 irq = sachip->irq_base + i; in sa1111_setup_irq()
496 irq_set_chip_data(irq, sachip); in sa1111_setup_irq()
503 irq_set_irq_type(sachip->irq, IRQ_TYPE_EDGE_RISING); in sa1111_setup_irq()
504 irq_set_handler_data(sachip->irq, sachip); in sa1111_setup_irq()
505 irq_set_chained_handler(sachip->irq, sa1111_irq_handler); in sa1111_setup_irq()
507 dev_info(sachip->dev, "Providing IRQ%u-%u\n", in sa1111_setup_irq()
508 sachip->irq_base, sachip->irq_base + SA1111_IRQ_NR - 1); in sa1111_setup_irq()
527 static void sa1111_wake(struct sa1111 *sachip) in sa1111_wake() argument
531 spin_lock_irqsave(&sachip->lock, flags); in sa1111_wake()
533 clk_enable(sachip->clk); in sa1111_wake()
538 r = sa1111_readl(sachip->base + SA1111_SKCR); in sa1111_wake()
540 sa1111_writel(r, sachip->base + SA1111_SKCR); in sa1111_wake()
542 sa1111_writel(r, sachip->base + SA1111_SKCR); in sa1111_wake()
554 sa1111_writel(r, sachip->base + SA1111_SKCR); in sa1111_wake()
565 sa1111_writel(0, sachip->base + SA1111_SKPCR); in sa1111_wake()
567 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_wake()
587 sa1111_configure_smc(struct sa1111 *sachip, int sdram, unsigned int drac, in sa1111_configure_smc() argument
595 sa1111_writel(smcr, sachip->base + SA1111_SMCR); in sa1111_configure_smc()
602 if (sachip->dev->dma_mask) in sa1111_configure_smc()
603 *sachip->dev->dma_mask &= sa1111_dma_mask[drac >> 2]; in sa1111_configure_smc()
605 sachip->dev->coherent_dma_mask &= sa1111_dma_mask[drac >> 2]; in sa1111_configure_smc()
617 sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent, in sa1111_init_one_child() argument
633 dev->dev.parent = sachip->dev; in sa1111_init_one_child()
636 dev->res.start = sachip->phys + info->offset; in sa1111_init_one_child()
640 dev->mapbase = sachip->base + info->offset; in sa1111_init_one_child()
644 dev->irq[i] = sachip->irq_base + info->irq[i]; in sa1111_init_one_child()
650 if (info->dma && sachip->dev->dma_mask) { in sa1111_init_one_child()
651 dev->dma_mask = *sachip->dev->dma_mask; in sa1111_init_one_child()
653 dev->dev.coherent_dma_mask = sachip->dev->coherent_dma_mask; in sa1111_init_one_child()
658 dev_err(sachip->dev, "failed to allocate resource for %s\n", in sa1111_init_one_child()
692 struct sa1111 *sachip; in __sa1111_probe() local
700 sachip = kzalloc(sizeof(struct sa1111), GFP_KERNEL); in __sa1111_probe()
701 if (!sachip) in __sa1111_probe()
704 sachip->clk = clk_get(me, "SA1111_CLK"); in __sa1111_probe()
705 if (IS_ERR(sachip->clk)) { in __sa1111_probe()
706 ret = PTR_ERR(sachip->clk); in __sa1111_probe()
710 ret = clk_prepare(sachip->clk); in __sa1111_probe()
714 spin_lock_init(&sachip->lock); in __sa1111_probe()
716 sachip->dev = me; in __sa1111_probe()
717 dev_set_drvdata(sachip->dev, sachip); in __sa1111_probe()
719 sachip->pdata = pd; in __sa1111_probe()
720 sachip->phys = mem->start; in __sa1111_probe()
721 sachip->irq = irq; in __sa1111_probe()
727 sachip->base = ioremap(mem->start, PAGE_SIZE * 2); in __sa1111_probe()
728 if (!sachip->base) { in __sa1111_probe()
736 id = sa1111_readl(sachip->base + SA1111_SKID); in __sa1111_probe()
749 sa1111_wake(sachip); in __sa1111_probe()
755 if (sachip->irq != NO_IRQ) { in __sa1111_probe()
756 ret = sa1111_setup_irq(sachip, pd->irq_base); in __sa1111_probe()
772 sa1111_configure_smc(sachip, 1, in __sa1111_probe()
781 val = sa1111_readl(sachip->base + SA1111_SKPCR); in __sa1111_probe()
782 sa1111_writel(val | SKPCR_DCLKEN, sachip->base + SA1111_SKPCR); in __sa1111_probe()
791 g_sa1111 = sachip; in __sa1111_probe()
799 sa1111_init_one_child(sachip, mem, &sa1111_devices[i]); in __sa1111_probe()
804 iounmap(sachip->base); in __sa1111_probe()
806 clk_unprepare(sachip->clk); in __sa1111_probe()
808 clk_put(sachip->clk); in __sa1111_probe()
810 kfree(sachip); in __sa1111_probe()
823 static void __sa1111_remove(struct sa1111 *sachip) in __sa1111_remove() argument
825 void __iomem *irqbase = sachip->base + SA1111_INTC; in __sa1111_remove()
827 device_for_each_child(sachip->dev, NULL, sa1111_remove_one); in __sa1111_remove()
835 clk_disable(sachip->clk); in __sa1111_remove()
836 clk_unprepare(sachip->clk); in __sa1111_remove()
838 if (sachip->irq != NO_IRQ) { in __sa1111_remove()
839 irq_set_chained_handler(sachip->irq, NULL); in __sa1111_remove()
840 irq_set_handler_data(sachip->irq, NULL); in __sa1111_remove()
841 irq_free_descs(sachip->irq_base, SA1111_IRQ_NR); in __sa1111_remove()
843 release_mem_region(sachip->phys + SA1111_INTC, 512); in __sa1111_remove()
846 iounmap(sachip->base); in __sa1111_remove()
847 clk_put(sachip->clk); in __sa1111_remove()
848 kfree(sachip); in __sa1111_remove()
876 struct sa1111 *sachip = platform_get_drvdata(dev); in sa1111_suspend() local
885 sachip->saved_state = save; in sa1111_suspend()
887 spin_lock_irqsave(&sachip->lock, flags); in sa1111_suspend()
892 base = sachip->base; in sa1111_suspend()
900 sa1111_writel(0, sachip->base + SA1111_SKPWM0); in sa1111_suspend()
901 sa1111_writel(0, sachip->base + SA1111_SKPWM1); in sa1111_suspend()
903 base = sachip->base + SA1111_INTC; in sa1111_suspend()
916 val = sa1111_readl(sachip->base + SA1111_SKCR); in sa1111_suspend()
917 sa1111_writel(val | SKCR_SLEEP, sachip->base + SA1111_SKCR); in sa1111_suspend()
919 clk_disable(sachip->clk); in sa1111_suspend()
921 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_suspend()
941 struct sa1111 *sachip = platform_get_drvdata(dev); in sa1111_resume() local
946 save = sachip->saved_state; in sa1111_resume()
954 id = sa1111_readl(sachip->base + SA1111_SKID); in sa1111_resume()
956 __sa1111_remove(sachip); in sa1111_resume()
965 sa1111_wake(sachip); in sa1111_resume()
976 spin_lock_irqsave(&sachip->lock, flags); in sa1111_resume()
978 sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0); in sa1111_resume()
979 sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1); in sa1111_resume()
981 base = sachip->base; in sa1111_resume()
989 base = sachip->base + SA1111_INTC; in sa1111_resume()
999 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_resume()
1001 sachip->saved_state = NULL; in sa1111_resume()
1029 struct sa1111 *sachip = platform_get_drvdata(pdev); in sa1111_remove() local
1031 if (sachip) { in sa1111_remove()
1033 kfree(sachip->saved_state); in sa1111_remove()
1034 sachip->saved_state = NULL; in sa1111_remove()
1036 __sa1111_remove(sachip); in sa1111_remove()
1076 static unsigned int __sa1111_pll_clock(struct sa1111 *sachip) in __sa1111_pll_clock() argument
1080 skcdr = sa1111_readl(sachip->base + SA1111_SKCDR); in __sa1111_pll_clock()
1100 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_pll_clock() local
1102 return __sa1111_pll_clock(sachip); in sa1111_pll_clock()
1116 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_select_audio_mode() local
1120 spin_lock_irqsave(&sachip->lock, flags); in sa1111_select_audio_mode()
1122 val = sa1111_readl(sachip->base + SA1111_SKCR); in sa1111_select_audio_mode()
1128 sa1111_writel(val, sachip->base + SA1111_SKCR); in sa1111_select_audio_mode()
1130 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_select_audio_mode()
1141 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_set_audio_rate() local
1147 div = (__sa1111_pll_clock(sachip) / 256 + rate / 2) / rate; in sa1111_set_audio_rate()
1153 sa1111_writel(div - 1, sachip->base + SA1111_SKAUD); in sa1111_set_audio_rate()
1165 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_get_audio_rate() local
1171 div = sa1111_readl(sachip->base + SA1111_SKAUD) + 1; in sa1111_get_audio_rate()
1173 return __sa1111_pll_clock(sachip) / (256 * div); in sa1111_get_audio_rate()
1181 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_set_io_dir() local
1184 void __iomem *gpio = sachip->base + SA1111_GPIO; in sa1111_set_io_dir()
1194 spin_lock_irqsave(&sachip->lock, flags); in sa1111_set_io_dir()
1202 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_set_io_dir()
1208 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_set_io() local
1211 void __iomem *gpio = sachip->base + SA1111_GPIO; in sa1111_set_io()
1213 spin_lock_irqsave(&sachip->lock, flags); in sa1111_set_io()
1217 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_set_io()
1223 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_set_sleep_io() local
1226 void __iomem *gpio = sachip->base + SA1111_GPIO; in sa1111_set_sleep_io()
1228 spin_lock_irqsave(&sachip->lock, flags); in sa1111_set_sleep_io()
1232 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_set_sleep_io()
1246 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_enable_device() local
1251 if (sachip->pdata && sachip->pdata->enable) in sa1111_enable_device()
1252 ret = sachip->pdata->enable(sachip->pdata->data, sadev->devid); in sa1111_enable_device()
1255 spin_lock_irqsave(&sachip->lock, flags); in sa1111_enable_device()
1256 val = sa1111_readl(sachip->base + SA1111_SKPCR); in sa1111_enable_device()
1257 sa1111_writel(val | sadev->skpcr_mask, sachip->base + SA1111_SKPCR); in sa1111_enable_device()
1258 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_enable_device()
1270 struct sa1111 *sachip = sa1111_chip_driver(sadev); in sa1111_disable_device() local
1274 spin_lock_irqsave(&sachip->lock, flags); in sa1111_disable_device()
1275 val = sa1111_readl(sachip->base + SA1111_SKPCR); in sa1111_disable_device()
1276 sa1111_writel(val & ~sadev->skpcr_mask, sachip->base + SA1111_SKPCR); in sa1111_disable_device()
1277 spin_unlock_irqrestore(&sachip->lock, flags); in sa1111_disable_device()
1279 if (sachip->pdata && sachip->pdata->disable) in sa1111_disable_device()
1280 sachip->pdata->disable(sachip->pdata->data, sadev->devid); in sa1111_disable_device()