162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 2012 John Crispin <john@phrozen.org> 562306a36Sopenharmony_ci * Copyright (C) 2010 Sameer Ahmad, Lantiq GmbH 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/ioport.h> 962306a36Sopenharmony_ci#include <linux/mod_devicetable.h> 1062306a36Sopenharmony_ci#include <linux/platform_device.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <lantiq_soc.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* Bias and regulator Setup Register */ 1562306a36Sopenharmony_ci#define DCDC_BIAS_VREG0 0xa 1662306a36Sopenharmony_ci/* Bias and regulator Setup Register */ 1762306a36Sopenharmony_ci#define DCDC_BIAS_VREG1 0xb 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define dcdc_w8(x, y) ltq_w8((x), dcdc_membase + (y)) 2062306a36Sopenharmony_ci#define dcdc_r8(x) ltq_r8(dcdc_membase + (x)) 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistatic void __iomem *dcdc_membase; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistatic int dcdc_probe(struct platform_device *pdev) 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci dcdc_membase = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); 2762306a36Sopenharmony_ci if (IS_ERR(dcdc_membase)) 2862306a36Sopenharmony_ci return PTR_ERR(dcdc_membase); 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci dev_info(&pdev->dev, "Core Voltage : %d mV\n", 3162306a36Sopenharmony_ci dcdc_r8(DCDC_BIAS_VREG1) * 8); 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci return 0; 3462306a36Sopenharmony_ci} 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistatic const struct of_device_id dcdc_match[] = { 3762306a36Sopenharmony_ci { .compatible = "lantiq,dcdc-xrx200" }, 3862306a36Sopenharmony_ci {}, 3962306a36Sopenharmony_ci}; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistatic struct platform_driver dcdc_driver = { 4262306a36Sopenharmony_ci .probe = dcdc_probe, 4362306a36Sopenharmony_ci .driver = { 4462306a36Sopenharmony_ci .name = "dcdc-xrx200", 4562306a36Sopenharmony_ci .of_match_table = dcdc_match, 4662306a36Sopenharmony_ci }, 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciint __init dcdc_init(void) 5062306a36Sopenharmony_ci{ 5162306a36Sopenharmony_ci int ret = platform_driver_register(&dcdc_driver); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci if (ret) 5462306a36Sopenharmony_ci pr_info("dcdc: Error registering platform driver\n"); 5562306a36Sopenharmony_ci return ret; 5662306a36Sopenharmony_ci} 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ciarch_initcall(dcdc_init); 59