Lines Matching refs:sp

45 static inline u32 ath79_spi_rr(struct ath79_spi *sp, unsigned reg)  in ath79_spi_rr()  argument
47 return ioread32(sp->base + reg); in ath79_spi_rr()
50 static inline void ath79_spi_wr(struct ath79_spi *sp, unsigned reg, u32 val) in ath79_spi_wr() argument
52 iowrite32(val, sp->base + reg); in ath79_spi_wr()
60 static inline void ath79_spi_delay(struct ath79_spi *sp, unsigned nsecs) in ath79_spi_delay() argument
62 if (nsecs > sp->rrw_delay) in ath79_spi_delay()
63 ndelay(nsecs - sp->rrw_delay); in ath79_spi_delay()
68 struct ath79_spi *sp = ath79_spidev_to_sp(spi); in ath79_spi_chipselect() local
74 sp->ioc_base |= AR71XX_SPI_IOC_CLK; in ath79_spi_chipselect()
76 sp->ioc_base &= ~AR71XX_SPI_IOC_CLK; in ath79_spi_chipselect()
78 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base); in ath79_spi_chipselect()
86 sp->ioc_base |= AR71XX_SPI_IOC_CS0; in ath79_spi_chipselect()
88 sp->ioc_base &= ~AR71XX_SPI_IOC_CS0; in ath79_spi_chipselect()
90 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base); in ath79_spi_chipselect()
95 static void ath79_spi_enable(struct ath79_spi *sp) in ath79_spi_enable() argument
98 ath79_spi_wr(sp, AR71XX_SPI_REG_FS, AR71XX_SPI_FS_GPIO); in ath79_spi_enable()
101 sp->reg_ctrl = ath79_spi_rr(sp, AR71XX_SPI_REG_CTRL); in ath79_spi_enable()
102 sp->ioc_base = ath79_spi_rr(sp, AR71XX_SPI_REG_IOC); in ath79_spi_enable()
105 ath79_spi_wr(sp, AR71XX_SPI_REG_CTRL, 0x43); in ath79_spi_enable()
108 static void ath79_spi_disable(struct ath79_spi *sp) in ath79_spi_disable() argument
111 ath79_spi_wr(sp, AR71XX_SPI_REG_CTRL, sp->reg_ctrl); in ath79_spi_disable()
113 ath79_spi_wr(sp, AR71XX_SPI_REG_FS, 0); in ath79_spi_disable()
118 struct ath79_spi *sp = ath79_spidev_to_sp(spi); in ath79_spi_setup_cs() local
138 sp->ioc_base &= ~AR71XX_SPI_IOC_CS0; in ath79_spi_setup_cs()
140 sp->ioc_base |= AR71XX_SPI_IOC_CS0; in ath79_spi_setup_cs()
142 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base); in ath79_spi_setup_cs()
181 struct ath79_spi *sp = ath79_spidev_to_sp(spi); in ath79_spi_txrx_mode0() local
182 u32 ioc = sp->ioc_base; in ath79_spi_txrx_mode0()
194 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, out); in ath79_spi_txrx_mode0()
195 ath79_spi_delay(sp, nsecs); in ath79_spi_txrx_mode0()
196 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, out | AR71XX_SPI_IOC_CLK); in ath79_spi_txrx_mode0()
197 ath79_spi_delay(sp, nsecs); in ath79_spi_txrx_mode0()
199 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, out); in ath79_spi_txrx_mode0()
204 return ath79_spi_rr(sp, AR71XX_SPI_REG_RDS); in ath79_spi_txrx_mode0()
210 struct ath79_spi *sp; in ath79_spi_probe() local
216 master = spi_alloc_master(&pdev->dev, sizeof(*sp)); in ath79_spi_probe()
222 sp = spi_master_get_devdata(master); in ath79_spi_probe()
224 platform_set_drvdata(pdev, sp); in ath79_spi_probe()
236 sp->bitbang.master = master; in ath79_spi_probe()
237 sp->bitbang.chipselect = ath79_spi_chipselect; in ath79_spi_probe()
238 sp->bitbang.txrx_word[SPI_MODE_0] = ath79_spi_txrx_mode0; in ath79_spi_probe()
239 sp->bitbang.setup_transfer = spi_bitbang_setup_transfer; in ath79_spi_probe()
240 sp->bitbang.flags = SPI_CS_HIGH; in ath79_spi_probe()
243 sp->base = devm_ioremap_resource(&pdev->dev, r); in ath79_spi_probe()
244 if (IS_ERR(sp->base)) { in ath79_spi_probe()
245 ret = PTR_ERR(sp->base); in ath79_spi_probe()
249 sp->clk = devm_clk_get(&pdev->dev, "ahb"); in ath79_spi_probe()
250 if (IS_ERR(sp->clk)) { in ath79_spi_probe()
251 ret = PTR_ERR(sp->clk); in ath79_spi_probe()
255 ret = clk_prepare_enable(sp->clk); in ath79_spi_probe()
259 rate = DIV_ROUND_UP(clk_get_rate(sp->clk), MHZ); in ath79_spi_probe()
265 sp->rrw_delay = ATH79_SPI_RRW_DELAY_FACTOR / rate; in ath79_spi_probe()
267 sp->rrw_delay); in ath79_spi_probe()
269 ath79_spi_enable(sp); in ath79_spi_probe()
270 ret = spi_bitbang_start(&sp->bitbang); in ath79_spi_probe()
277 ath79_spi_disable(sp); in ath79_spi_probe()
279 clk_disable_unprepare(sp->clk); in ath79_spi_probe()
281 spi_master_put(sp->bitbang.master); in ath79_spi_probe()
288 struct ath79_spi *sp = platform_get_drvdata(pdev); in ath79_spi_remove() local
290 spi_bitbang_stop(&sp->bitbang); in ath79_spi_remove()
291 ath79_spi_disable(sp); in ath79_spi_remove()
292 clk_disable_unprepare(sp->clk); in ath79_spi_remove()
293 spi_master_put(sp->bitbang.master); in ath79_spi_remove()