Lines Matching refs:bs

109 static void bcm63xx_hsspi_set_cs(struct bcm63xx_hsspi *bs, unsigned cs,  in bcm63xx_hsspi_set_cs()  argument
114 mutex_lock(&bs->bus_mutex); in bcm63xx_hsspi_set_cs()
115 reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_set_cs()
118 if (active == !(bs->cs_polarity & BIT(cs))) in bcm63xx_hsspi_set_cs()
121 __raw_writel(reg, bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_set_cs()
122 mutex_unlock(&bs->bus_mutex); in bcm63xx_hsspi_set_cs()
125 static void bcm63xx_hsspi_set_clk(struct bcm63xx_hsspi *bs, in bcm63xx_hsspi_set_clk() argument
131 reg = DIV_ROUND_UP(2048, DIV_ROUND_UP(bs->speed_hz, hz)); in bcm63xx_hsspi_set_clk()
133 bs->regs + HSSPI_PROFILE_CLK_CTRL_REG(profile)); in bcm63xx_hsspi_set_clk()
135 reg = __raw_readl(bs->regs + HSSPI_PROFILE_SIGNAL_CTRL_REG(profile)); in bcm63xx_hsspi_set_clk()
140 __raw_writel(reg, bs->regs + HSSPI_PROFILE_SIGNAL_CTRL_REG(profile)); in bcm63xx_hsspi_set_clk()
142 mutex_lock(&bs->bus_mutex); in bcm63xx_hsspi_set_clk()
144 reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_set_clk()
148 __raw_writel(reg, bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_set_clk()
149 mutex_unlock(&bs->bus_mutex); in bcm63xx_hsspi_set_clk()
154 struct bcm63xx_hsspi *bs = spi_master_get_devdata(spi->master); in bcm63xx_hsspi_do_txrx() local
162 bcm63xx_hsspi_set_clk(bs, spi, t->speed_hz); in bcm63xx_hsspi_do_txrx()
163 bcm63xx_hsspi_set_cs(bs, spi->chip_select, true); in bcm63xx_hsspi_do_txrx()
181 bs->regs + HSSPI_PROFILE_MODE_CTRL_REG(chip_select)); in bcm63xx_hsspi_do_txrx()
186 reinit_completion(&bs->done); in bcm63xx_hsspi_do_txrx()
188 memcpy_toio(bs->fifo + HSSPI_OPCODE_LEN, tx, curr_step); in bcm63xx_hsspi_do_txrx()
192 __raw_writew(opcode | curr_step, bs->fifo); in bcm63xx_hsspi_do_txrx()
196 bs->regs + HSSPI_INT_MASK_REG); in bcm63xx_hsspi_do_txrx()
202 bs->regs + HSSPI_PINGPONG_COMMAND_REG(0)); in bcm63xx_hsspi_do_txrx()
204 if (wait_for_completion_timeout(&bs->done, HZ) == 0) { in bcm63xx_hsspi_do_txrx()
205 dev_err(&bs->pdev->dev, "transfer timed out!\n"); in bcm63xx_hsspi_do_txrx()
210 memcpy_fromio(rx, bs->fifo, curr_step); in bcm63xx_hsspi_do_txrx()
222 struct bcm63xx_hsspi *bs = spi_master_get_devdata(spi->master); in bcm63xx_hsspi_setup() local
225 reg = __raw_readl(bs->regs + in bcm63xx_hsspi_setup()
232 __raw_writel(reg, bs->regs + in bcm63xx_hsspi_setup()
235 mutex_lock(&bs->bus_mutex); in bcm63xx_hsspi_setup()
236 reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_setup()
239 if ((reg & GLOBAL_CTRL_CS_POLARITY_MASK) == bs->cs_polarity) { in bcm63xx_hsspi_setup()
244 __raw_writel(reg, bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_setup()
248 bs->cs_polarity |= BIT(spi->chip_select); in bcm63xx_hsspi_setup()
250 bs->cs_polarity &= ~BIT(spi->chip_select); in bcm63xx_hsspi_setup()
252 mutex_unlock(&bs->bus_mutex); in bcm63xx_hsspi_setup()
260 struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); in bcm63xx_hsspi_transfer_one() local
282 bcm63xx_hsspi_set_cs(bs, dummy_cs, true); in bcm63xx_hsspi_transfer_one()
295 bcm63xx_hsspi_set_cs(bs, spi->chip_select, false); in bcm63xx_hsspi_transfer_one()
298 mutex_lock(&bs->bus_mutex); in bcm63xx_hsspi_transfer_one()
299 reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_transfer_one()
301 reg |= bs->cs_polarity; in bcm63xx_hsspi_transfer_one()
302 __raw_writel(reg, bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_transfer_one()
303 mutex_unlock(&bs->bus_mutex); in bcm63xx_hsspi_transfer_one()
313 struct bcm63xx_hsspi *bs = (struct bcm63xx_hsspi *)dev_id; in bcm63xx_hsspi_interrupt() local
315 if (__raw_readl(bs->regs + HSSPI_INT_STATUS_MASKED_REG) == 0) in bcm63xx_hsspi_interrupt()
318 __raw_writel(HSSPI_INT_CLEAR_ALL, bs->regs + HSSPI_INT_STATUS_REG); in bcm63xx_hsspi_interrupt()
319 __raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); in bcm63xx_hsspi_interrupt()
321 complete(&bs->done); in bcm63xx_hsspi_interrupt()
329 struct bcm63xx_hsspi *bs; in bcm63xx_hsspi_probe() local
361 master = spi_alloc_master(&pdev->dev, sizeof(*bs)); in bcm63xx_hsspi_probe()
367 bs = spi_master_get_devdata(master); in bcm63xx_hsspi_probe()
368 bs->pdev = pdev; in bcm63xx_hsspi_probe()
369 bs->clk = clk; in bcm63xx_hsspi_probe()
370 bs->regs = regs; in bcm63xx_hsspi_probe()
371 bs->speed_hz = rate; in bcm63xx_hsspi_probe()
372 bs->fifo = (u8 __iomem *)(bs->regs + HSSPI_FIFO_REG(0)); in bcm63xx_hsspi_probe()
374 mutex_init(&bs->bus_mutex); in bcm63xx_hsspi_probe()
375 init_completion(&bs->done); in bcm63xx_hsspi_probe()
389 __raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); in bcm63xx_hsspi_probe()
392 __raw_writel(HSSPI_INT_CLEAR_ALL, bs->regs + HSSPI_INT_STATUS_REG); in bcm63xx_hsspi_probe()
395 reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_probe()
396 bs->cs_polarity = reg & GLOBAL_CTRL_CS_POLARITY_MASK; in bcm63xx_hsspi_probe()
398 bs->regs + HSSPI_GLOBAL_CTRL_REG); in bcm63xx_hsspi_probe()
401 pdev->name, bs); in bcm63xx_hsspi_probe()
424 struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); in bcm63xx_hsspi_remove() local
427 __raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); in bcm63xx_hsspi_remove()
428 clk_disable_unprepare(bs->clk); in bcm63xx_hsspi_remove()
437 struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); in bcm63xx_hsspi_suspend() local
440 clk_disable_unprepare(bs->clk); in bcm63xx_hsspi_suspend()
448 struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); in bcm63xx_hsspi_resume() local
451 ret = clk_prepare_enable(bs->clk); in bcm63xx_hsspi_resume()