Lines Matching refs:sadi

155 static int sprd_adi_check_addr(struct sprd_adi *sadi, u32 reg)  in sprd_adi_check_addr()  argument
157 if (reg >= sadi->data->slave_addr_size) { in sprd_adi_check_addr()
158 dev_err(sadi->dev, in sprd_adi_check_addr()
167 static int sprd_adi_drain_fifo(struct sprd_adi *sadi) in sprd_adi_drain_fifo() argument
173 sts = readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS); in sprd_adi_drain_fifo()
181 dev_err(sadi->dev, "drain write fifo timeout\n"); in sprd_adi_drain_fifo()
188 static int sprd_adi_fifo_is_full(struct sprd_adi *sadi) in sprd_adi_fifo_is_full() argument
190 return readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS) & BIT_FIFO_FULL; in sprd_adi_fifo_is_full()
217 static int sprd_adi_read(struct sprd_adi *sadi, u32 reg, u32 *read_val) in sprd_adi_read() argument
224 if (sadi->hwlock) { in sprd_adi_read()
225 ret = hwspin_lock_timeout_irqsave(sadi->hwlock, in sprd_adi_read()
229 dev_err(sadi->dev, "get the hw lock failed\n"); in sprd_adi_read()
234 ret = sprd_adi_check_addr(sadi, reg); in sprd_adi_read()
242 writel_relaxed(reg, sadi->base + REG_ADI_RD_CMD); in sprd_adi_read()
251 val = readl_relaxed(sadi->base + REG_ADI_RD_DATA); in sprd_adi_read()
259 dev_err(sadi->dev, "ADI read timeout\n"); in sprd_adi_read()
270 if (sadi->data->read_check) { in sprd_adi_read()
271 ret = sadi->data->read_check(val, reg); in sprd_adi_read()
279 if (sadi->hwlock) in sprd_adi_read()
280 hwspin_unlock_irqrestore(sadi->hwlock, &flags); in sprd_adi_read()
284 static int sprd_adi_write(struct sprd_adi *sadi, u32 reg, u32 val) in sprd_adi_write() argument
290 if (sadi->hwlock) { in sprd_adi_write()
291 ret = hwspin_lock_timeout_irqsave(sadi->hwlock, in sprd_adi_write()
295 dev_err(sadi->dev, "get the hw lock failed\n"); in sprd_adi_write()
300 ret = sprd_adi_check_addr(sadi, reg); in sprd_adi_write()
304 ret = sprd_adi_drain_fifo(sadi); in sprd_adi_write()
313 if (!sprd_adi_fifo_is_full(sadi)) { in sprd_adi_write()
315 writel_relaxed(val, (void __iomem *)(sadi->slave_vbase + reg)); in sprd_adi_write()
323 dev_err(sadi->dev, "write fifo is full\n"); in sprd_adi_write()
328 if (sadi->hwlock) in sprd_adi_write()
329 hwspin_unlock_irqrestore(sadi->hwlock, &flags); in sprd_adi_write()
337 struct sprd_adi *sadi = spi_controller_get_devdata(ctlr); in sprd_adi_transfer_one() local
343 ret = sprd_adi_read(sadi, reg, &val); in sprd_adi_transfer_one()
349 ret = sprd_adi_write(sadi, reg, val); in sprd_adi_transfer_one()
351 dev_err(sadi->dev, "no buffer for transfer\n"); in sprd_adi_transfer_one()
362 struct sprd_adi *sadi = (struct sprd_adi *)p; in sprd_adi_set_wdt_rst_mode() local
365 sprd_adi_read(sadi, PMIC_RST_STATUS, &val); in sprd_adi_set_wdt_rst_mode()
367 sprd_adi_write(sadi, PMIC_RST_STATUS, val); in sprd_adi_set_wdt_rst_mode()
371 static int sprd_adi_restart(struct sprd_adi *sadi, unsigned long mode, in sprd_adi_restart() argument
406 sprd_adi_read(sadi, wdg->rst_sts, &val); in sprd_adi_restart()
409 sprd_adi_write(sadi, wdg->rst_sts, val); in sprd_adi_restart()
412 sprd_adi_read(sadi, wdg->wdg_en, &val); in sprd_adi_restart()
414 sprd_adi_write(sadi, wdg->wdg_en, val); in sprd_adi_restart()
417 sprd_adi_read(sadi, wdg->wdg_clk, &val); in sprd_adi_restart()
419 sprd_adi_write(sadi, wdg->wdg_clk, val); in sprd_adi_restart()
422 sprd_adi_write(sadi, wdg->base + REG_WDG_LOCK, WDG_UNLOCK_KEY); in sprd_adi_restart()
424 sprd_adi_read(sadi, wdg->base + REG_WDG_CTRL, &val); in sprd_adi_restart()
426 sprd_adi_write(sadi, wdg->base + REG_WDG_CTRL, val); in sprd_adi_restart()
429 sprd_adi_write(sadi, wdg->base + REG_WDG_LOAD_HIGH, 0); in sprd_adi_restart()
430 sprd_adi_write(sadi, wdg->base + REG_WDG_LOAD_LOW, in sprd_adi_restart()
434 sprd_adi_read(sadi, wdg->base + REG_WDG_CTRL, &val); in sprd_adi_restart()
436 sprd_adi_write(sadi, wdg->base + REG_WDG_CTRL, val); in sprd_adi_restart()
439 sprd_adi_write(sadi, wdg->base + REG_WDG_LOCK, ~WDG_UNLOCK_KEY); in sprd_adi_restart()
443 dev_emerg(sadi->dev, "Unable to restart system\n"); in sprd_adi_restart()
459 static void sprd_adi_hw_init(struct sprd_adi *sadi) in sprd_adi_hw_init() argument
461 struct device_node *np = sadi->dev->of_node; in sprd_adi_hw_init()
467 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIL); in sprd_adi_hw_init()
468 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIH); in sprd_adi_hw_init()
471 tmp = readl_relaxed(sadi->base + REG_ADI_GSSI_CFG0); in sprd_adi_hw_init()
473 writel_relaxed(tmp, sadi->base + REG_ADI_GSSI_CFG0); in sprd_adi_hw_init()
478 dev_info(sadi->dev, "no hw channels setting in node\n"); in sprd_adi_hw_init()
492 writel_relaxed(chn_config, sadi->base + in sprd_adi_hw_init()
496 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN); in sprd_adi_hw_init()
498 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN); in sprd_adi_hw_init()
500 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN1); in sprd_adi_hw_init()
502 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN1); in sprd_adi_hw_init()
512 struct sprd_adi *sadi; in sprd_adi_probe() local
536 sadi = spi_controller_get_devdata(ctlr); in sprd_adi_probe()
538 sadi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); in sprd_adi_probe()
539 if (IS_ERR(sadi->base)) { in sprd_adi_probe()
540 ret = PTR_ERR(sadi->base); in sprd_adi_probe()
544 sadi->slave_vbase = (unsigned long)sadi->base + in sprd_adi_probe()
546 sadi->slave_pbase = res->start + data->slave_offset; in sprd_adi_probe()
547 sadi->ctlr = ctlr; in sprd_adi_probe()
548 sadi->dev = &pdev->dev; in sprd_adi_probe()
549 sadi->data = data; in sprd_adi_probe()
552 sadi->hwlock = in sprd_adi_probe()
554 if (!sadi->hwlock) { in sprd_adi_probe()
569 sprd_adi_hw_init(sadi); in sprd_adi_probe()
571 if (sadi->data->wdg_rst) in sprd_adi_probe()
572 sadi->data->wdg_rst(sadi); in sprd_adi_probe()
587 if (sadi->data->restart) { in sprd_adi_probe()
589 sadi->data->restart, in sprd_adi_probe()
590 sadi); in sprd_adi_probe()