dcdc.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * This program is free software; you can redistribute it and/or modify it
  3. * under the terms of the GNU General Public License version 2 as published
  4. * by the Free Software Foundation.
  5. *
  6. * Copyright (C) 2012 John Crispin <john@phrozen.org>
  7. * Copyright (C) 2010 Sameer Ahmad, Lantiq GmbH
  8. */
  9. #include <linux/ioport.h>
  10. #include <linux/of_platform.h>
  11. #include <lantiq_soc.h>
  12. /* Bias and regulator Setup Register */
  13. #define DCDC_BIAS_VREG0 0xa
  14. /* Bias and regulator Setup Register */
  15. #define DCDC_BIAS_VREG1 0xb
  16. #define dcdc_w8(x, y) ltq_w8((x), dcdc_membase + (y))
  17. #define dcdc_r8(x) ltq_r8(dcdc_membase + (x))
  18. static void __iomem *dcdc_membase;
  19. static int dcdc_probe(struct platform_device *pdev)
  20. {
  21. struct resource *res;
  22. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  23. dcdc_membase = devm_ioremap_resource(&pdev->dev, res);
  24. if (IS_ERR(dcdc_membase))
  25. return PTR_ERR(dcdc_membase);
  26. dev_info(&pdev->dev, "Core Voltage : %d mV\n",
  27. dcdc_r8(DCDC_BIAS_VREG1) * 8);
  28. return 0;
  29. }
  30. static const struct of_device_id dcdc_match[] = {
  31. { .compatible = "lantiq,dcdc-xrx200" },
  32. {},
  33. };
  34. static struct platform_driver dcdc_driver = {
  35. .probe = dcdc_probe,
  36. .driver = {
  37. .name = "dcdc-xrx200",
  38. .of_match_table = dcdc_match,
  39. },
  40. };
  41. int __init dcdc_init(void)
  42. {
  43. int ret = platform_driver_register(&dcdc_driver);
  44. if (ret)
  45. pr_info("dcdc: Error registering platform driver\n");
  46. return ret;
  47. }
  48. arch_initcall(dcdc_init);