Lines Matching +full:ums512 +full:- +full:thermal

4  * SPDX-License-Identifier: GPL-2.0
36 #define REG_ADI_CHN_ADDR(id) (0x44 + (id - 2) * 4)
53 * ADI slave devices include RTC, ADC, regulator, charger, thermal and so on.
159 if (reg >= sadi->data->slave_addr_size) { in sprd_adi_check_addr()
160 dev_err(sadi->dev, in sprd_adi_check_addr()
163 return -EINVAL; in sprd_adi_check_addr()
175 sts = readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS); in sprd_adi_drain_fifo()
180 } while (--timeout); in sprd_adi_drain_fifo()
183 dev_err(sadi->dev, "drain write fifo timeout\n"); in sprd_adi_drain_fifo()
184 return -EBUSY; in sprd_adi_drain_fifo()
192 return readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS) & BIT_FIFO_FULL; in sprd_adi_fifo_is_full()
203 return -EIO; in sprd_adi_read_check()
226 if (sadi->hwlock) { in sprd_adi_read()
227 ret = hwspin_lock_timeout_irqsave(sadi->hwlock, in sprd_adi_read()
231 dev_err(sadi->dev, "get the hw lock failed\n"); in sprd_adi_read()
244 writel_relaxed(reg, sadi->base + REG_ADI_RD_CMD); in sprd_adi_read()
253 val = readl_relaxed(sadi->base + REG_ADI_RD_DATA); in sprd_adi_read()
258 } while (--read_timeout); in sprd_adi_read()
261 dev_err(sadi->dev, "ADI read timeout\n"); in sprd_adi_read()
262 ret = -EBUSY; in sprd_adi_read()
272 if (sadi->data->read_check) { in sprd_adi_read()
273 ret = sadi->data->read_check(val, reg); in sprd_adi_read()
281 if (sadi->hwlock) in sprd_adi_read()
282 hwspin_unlock_irqrestore(sadi->hwlock, &flags); in sprd_adi_read()
292 if (sadi->hwlock) { in sprd_adi_write()
293 ret = hwspin_lock_timeout_irqsave(sadi->hwlock, in sprd_adi_write()
297 dev_err(sadi->dev, "get the hw lock failed\n"); in sprd_adi_write()
317 writel_relaxed(val, (void __iomem *)(sadi->slave_vbase + reg)); in sprd_adi_write()
322 } while (--timeout); in sprd_adi_write()
325 dev_err(sadi->dev, "write fifo is full\n"); in sprd_adi_write()
326 ret = -EBUSY; in sprd_adi_write()
330 if (sadi->hwlock) in sprd_adi_write()
331 hwspin_unlock_irqrestore(sadi->hwlock, &flags); in sprd_adi_write()
343 if (t->rx_buf) { in sprd_adi_transfer_one()
344 reg = *(u32 *)t->rx_buf; in sprd_adi_transfer_one()
346 *(u32 *)t->rx_buf = val; in sprd_adi_transfer_one()
347 } else if (t->tx_buf) { in sprd_adi_transfer_one()
348 u32 *p = (u32 *)t->tx_buf; in sprd_adi_transfer_one()
353 dev_err(sadi->dev, "no buffer for transfer\n"); in sprd_adi_transfer_one()
354 ret = -EINVAL; in sprd_adi_transfer_one()
410 sprd_adi_read(sadi, wdg->rst_sts, &val); in sprd_adi_restart()
413 sprd_adi_write(sadi, wdg->rst_sts, val); in sprd_adi_restart()
416 sprd_adi_read(sadi, wdg->wdg_en, &val); in sprd_adi_restart()
418 sprd_adi_write(sadi, wdg->wdg_en, val); in sprd_adi_restart()
421 sprd_adi_read(sadi, wdg->wdg_clk, &val); in sprd_adi_restart()
423 sprd_adi_write(sadi, wdg->wdg_clk, val); in sprd_adi_restart()
426 sprd_adi_write(sadi, wdg->base + REG_WDG_LOCK, WDG_UNLOCK_KEY); in sprd_adi_restart()
428 sprd_adi_read(sadi, wdg->base + REG_WDG_CTRL, &val); in sprd_adi_restart()
430 sprd_adi_write(sadi, wdg->base + REG_WDG_CTRL, val); in sprd_adi_restart()
433 sprd_adi_write(sadi, wdg->base + REG_WDG_LOAD_HIGH, 0); in sprd_adi_restart()
434 sprd_adi_write(sadi, wdg->base + REG_WDG_LOAD_LOW, in sprd_adi_restart()
438 sprd_adi_read(sadi, wdg->base + REG_WDG_CTRL, &val); in sprd_adi_restart()
440 sprd_adi_write(sadi, wdg->base + REG_WDG_CTRL, val); in sprd_adi_restart()
443 sprd_adi_write(sadi, wdg->base + REG_WDG_LOCK, ~WDG_UNLOCK_KEY); in sprd_adi_restart()
447 dev_emerg(sadi->dev, "Unable to restart system\n"); in sprd_adi_restart()
466 struct device_node *np = sadi->dev->of_node; in sprd_adi_hw_init()
472 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIL); in sprd_adi_hw_init()
473 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIH); in sprd_adi_hw_init()
476 tmp = readl_relaxed(sadi->base + REG_ADI_GSSI_CFG0); in sprd_adi_hw_init()
478 writel_relaxed(tmp, sadi->base + REG_ADI_GSSI_CFG0); in sprd_adi_hw_init()
481 list = of_get_property(np, "sprd,hw-channels", &size); in sprd_adi_hw_init()
483 dev_info(sadi->dev, "no hw channels setting in node\n"); in sprd_adi_hw_init()
497 writel_relaxed(chn_config, sadi->base + in sprd_adi_hw_init()
501 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN); in sprd_adi_hw_init()
503 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN); in sprd_adi_hw_init()
505 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN1); in sprd_adi_hw_init()
506 value |= BIT(chn_id - 32); in sprd_adi_hw_init()
507 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN1); in sprd_adi_hw_init()
514 struct device_node *np = pdev->dev.of_node; in sprd_adi_probe()
523 dev_err(&pdev->dev, "can not find the adi bus node\n"); in sprd_adi_probe()
524 return -ENODEV; in sprd_adi_probe()
527 data = of_device_get_match_data(&pdev->dev); in sprd_adi_probe()
529 dev_err(&pdev->dev, "no matching driver data found\n"); in sprd_adi_probe()
530 return -EINVAL; in sprd_adi_probe()
533 pdev->id = of_alias_get_id(np, "spi"); in sprd_adi_probe()
536 ctlr = spi_alloc_master(&pdev->dev, sizeof(struct sprd_adi)); in sprd_adi_probe()
538 return -ENOMEM; in sprd_adi_probe()
540 dev_set_drvdata(&pdev->dev, ctlr); in sprd_adi_probe()
543 sadi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); in sprd_adi_probe()
544 if (IS_ERR(sadi->base)) { in sprd_adi_probe()
545 ret = PTR_ERR(sadi->base); in sprd_adi_probe()
549 sadi->slave_vbase = (unsigned long)sadi->base + in sprd_adi_probe()
550 data->slave_offset; in sprd_adi_probe()
551 sadi->slave_pbase = res->start + data->slave_offset; in sprd_adi_probe()
552 sadi->ctlr = ctlr; in sprd_adi_probe()
553 sadi->dev = &pdev->dev; in sprd_adi_probe()
554 sadi->data = data; in sprd_adi_probe()
557 sadi->hwlock = in sprd_adi_probe()
558 devm_hwspin_lock_request_specific(&pdev->dev, ret); in sprd_adi_probe()
559 if (!sadi->hwlock) { in sprd_adi_probe()
560 ret = -ENXIO; in sprd_adi_probe()
565 case -ENOENT: in sprd_adi_probe()
566 dev_info(&pdev->dev, "no hardware spinlock supplied\n"); in sprd_adi_probe()
569 dev_err_probe(&pdev->dev, ret, "failed to find hwlock id\n"); in sprd_adi_probe()
576 if (sadi->data->wdg_rst) in sprd_adi_probe()
577 sadi->data->wdg_rst(sadi); in sprd_adi_probe()
579 ctlr->dev.of_node = pdev->dev.of_node; in sprd_adi_probe()
580 ctlr->bus_num = pdev->id; in sprd_adi_probe()
581 ctlr->num_chipselect = num_chipselect; in sprd_adi_probe()
582 ctlr->flags = SPI_CONTROLLER_HALF_DUPLEX; in sprd_adi_probe()
583 ctlr->bits_per_word_mask = 0; in sprd_adi_probe()
584 ctlr->transfer_one = sprd_adi_transfer_one; in sprd_adi_probe()
586 ret = devm_spi_register_controller(&pdev->dev, ctlr); in sprd_adi_probe()
588 dev_err(&pdev->dev, "failed to register SPI controller\n"); in sprd_adi_probe()
592 if (sadi->data->restart) { in sprd_adi_probe()
593 sadi->restart_handler.notifier_call = sadi->data->restart; in sprd_adi_probe()
594 sadi->restart_handler.priority = 128; in sprd_adi_probe()
595 ret = register_restart_handler(&sadi->restart_handler); in sprd_adi_probe()
597 dev_err(&pdev->dev, "can not register restart handler\n"); in sprd_adi_probe()
611 struct spi_controller *ctlr = dev_get_drvdata(&pdev->dev); in sprd_adi_remove()
614 unregister_restart_handler(&sadi->restart_handler); in sprd_adi_remove()
639 .compatible = "sprd,sc9860-adi",
643 .compatible = "sprd,sc9863-adi",
647 .compatible = "sprd,ums512-adi",
656 .name = "sprd-adi",