Lines Matching defs:sadi
157 static int sprd_adi_check_addr(struct sprd_adi *sadi, u32 reg)
159 if (reg >= sadi->data->slave_addr_size) {
160 dev_err(sadi->dev,
169 static int sprd_adi_drain_fifo(struct sprd_adi *sadi)
175 sts = readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS);
183 dev_err(sadi->dev, "drain write fifo timeout\n");
190 static int sprd_adi_fifo_is_full(struct sprd_adi *sadi)
192 return readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS) & BIT_FIFO_FULL;
219 static int sprd_adi_read(struct sprd_adi *sadi, u32 reg, u32 *read_val)
226 if (sadi->hwlock) {
227 ret = hwspin_lock_timeout_irqsave(sadi->hwlock,
231 dev_err(sadi->dev, "get the hw lock failed\n");
236 ret = sprd_adi_check_addr(sadi, reg);
244 writel_relaxed(reg, sadi->base + REG_ADI_RD_CMD);
253 val = readl_relaxed(sadi->base + REG_ADI_RD_DATA);
261 dev_err(sadi->dev, "ADI read timeout\n");
272 if (sadi->data->read_check) {
273 ret = sadi->data->read_check(val, reg);
281 if (sadi->hwlock)
282 hwspin_unlock_irqrestore(sadi->hwlock, &flags);
286 static int sprd_adi_write(struct sprd_adi *sadi, u32 reg, u32 val)
292 if (sadi->hwlock) {
293 ret = hwspin_lock_timeout_irqsave(sadi->hwlock,
297 dev_err(sadi->dev, "get the hw lock failed\n");
302 ret = sprd_adi_check_addr(sadi, reg);
306 ret = sprd_adi_drain_fifo(sadi);
315 if (!sprd_adi_fifo_is_full(sadi)) {
317 writel_relaxed(val, (void __iomem *)(sadi->slave_vbase + reg));
325 dev_err(sadi->dev, "write fifo is full\n");
330 if (sadi->hwlock)
331 hwspin_unlock_irqrestore(sadi->hwlock, &flags);
339 struct sprd_adi *sadi = spi_controller_get_devdata(ctlr);
345 ret = sprd_adi_read(sadi, reg, &val);
351 ret = sprd_adi_write(sadi, reg, val);
353 dev_err(sadi->dev, "no buffer for transfer\n");
364 struct sprd_adi *sadi = (struct sprd_adi *)p;
367 sprd_adi_read(sadi, PMIC_RST_STATUS, &val);
369 sprd_adi_write(sadi, PMIC_RST_STATUS, val);
376 struct sprd_adi *sadi = container_of(this, struct sprd_adi,
410 sprd_adi_read(sadi, wdg->rst_sts, &val);
413 sprd_adi_write(sadi, wdg->rst_sts, val);
416 sprd_adi_read(sadi, wdg->wdg_en, &val);
418 sprd_adi_write(sadi, wdg->wdg_en, val);
421 sprd_adi_read(sadi, wdg->wdg_clk, &val);
423 sprd_adi_write(sadi, wdg->wdg_clk, val);
426 sprd_adi_write(sadi, wdg->base + REG_WDG_LOCK, WDG_UNLOCK_KEY);
428 sprd_adi_read(sadi, wdg->base + REG_WDG_CTRL, &val);
430 sprd_adi_write(sadi, wdg->base + REG_WDG_CTRL, val);
433 sprd_adi_write(sadi, wdg->base + REG_WDG_LOAD_HIGH, 0);
434 sprd_adi_write(sadi, wdg->base + REG_WDG_LOAD_LOW,
438 sprd_adi_read(sadi, wdg->base + REG_WDG_CTRL, &val);
440 sprd_adi_write(sadi, wdg->base + REG_WDG_CTRL, val);
443 sprd_adi_write(sadi, wdg->base + REG_WDG_LOCK, ~WDG_UNLOCK_KEY);
447 dev_emerg(sadi->dev, "Unable to restart system\n");
464 static void sprd_adi_hw_init(struct sprd_adi *sadi)
466 struct device_node *np = sadi->dev->of_node;
472 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIL);
473 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIH);
476 tmp = readl_relaxed(sadi->base + REG_ADI_GSSI_CFG0);
478 writel_relaxed(tmp, sadi->base + REG_ADI_GSSI_CFG0);
483 dev_info(sadi->dev, "no hw channels setting in node\n");
497 writel_relaxed(chn_config, sadi->base +
501 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN);
503 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN);
505 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN1);
507 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN1);
517 struct sprd_adi *sadi;
541 sadi = spi_controller_get_devdata(ctlr);
543 sadi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
544 if (IS_ERR(sadi->base)) {
545 ret = PTR_ERR(sadi->base);
549 sadi->slave_vbase = (unsigned long)sadi->base +
551 sadi->slave_pbase = res->start + data->slave_offset;
552 sadi->ctlr = ctlr;
553 sadi->dev = &pdev->dev;
554 sadi->data = data;
557 sadi->hwlock =
559 if (!sadi->hwlock) {
574 sprd_adi_hw_init(sadi);
576 if (sadi->data->wdg_rst)
577 sadi->data->wdg_rst(sadi);
592 if (sadi->data->restart) {
593 sadi->restart_handler.notifier_call = sadi->data->restart;
594 sadi->restart_handler.priority = 128;
595 ret = register_restart_handler(&sadi->restart_handler);
612 struct sprd_adi *sadi = spi_controller_get_devdata(ctlr);
614 unregister_restart_handler(&sadi->restart_handler);