pll-s3c2410.c 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // SPDX-License-Identifier: GPL-2.0+
  2. //
  3. // Copyright (c) 2006-2007 Simtec Electronics
  4. // http://armlinux.simtec.co.uk/
  5. // Ben Dooks <[email protected]>
  6. // Vincent Sanders <[email protected]>
  7. //
  8. // S3C2410 CPU PLL tables
  9. #include <linux/types.h>
  10. #include <linux/kernel.h>
  11. #include <linux/module.h>
  12. #include <linux/device.h>
  13. #include <linux/list.h>
  14. #include <linux/clk.h>
  15. #include <linux/err.h>
  16. #include <linux/soc/samsung/s3c-cpufreq-core.h>
  17. #include <linux/soc/samsung/s3c-pm.h>
  18. /* This array should be sorted in ascending order of the frequencies */
  19. static struct cpufreq_frequency_table pll_vals_12MHz[] = {
  20. { .frequency = 34000000, .driver_data = PLLVAL(82, 2, 3), },
  21. { .frequency = 45000000, .driver_data = PLLVAL(82, 1, 3), },
  22. { .frequency = 48000000, .driver_data = PLLVAL(120, 2, 3), },
  23. { .frequency = 51000000, .driver_data = PLLVAL(161, 3, 3), },
  24. { .frequency = 56000000, .driver_data = PLLVAL(142, 2, 3), },
  25. { .frequency = 68000000, .driver_data = PLLVAL(82, 2, 2), },
  26. { .frequency = 79000000, .driver_data = PLLVAL(71, 1, 2), },
  27. { .frequency = 85000000, .driver_data = PLLVAL(105, 2, 2), },
  28. { .frequency = 90000000, .driver_data = PLLVAL(112, 2, 2), },
  29. { .frequency = 101000000, .driver_data = PLLVAL(127, 2, 2), },
  30. { .frequency = 113000000, .driver_data = PLLVAL(105, 1, 2), },
  31. { .frequency = 118000000, .driver_data = PLLVAL(150, 2, 2), },
  32. { .frequency = 124000000, .driver_data = PLLVAL(116, 1, 2), },
  33. { .frequency = 135000000, .driver_data = PLLVAL(82, 2, 1), },
  34. { .frequency = 147000000, .driver_data = PLLVAL(90, 2, 1), },
  35. { .frequency = 152000000, .driver_data = PLLVAL(68, 1, 1), },
  36. { .frequency = 158000000, .driver_data = PLLVAL(71, 1, 1), },
  37. { .frequency = 170000000, .driver_data = PLLVAL(77, 1, 1), },
  38. { .frequency = 180000000, .driver_data = PLLVAL(82, 1, 1), },
  39. { .frequency = 186000000, .driver_data = PLLVAL(85, 1, 1), },
  40. { .frequency = 192000000, .driver_data = PLLVAL(88, 1, 1), },
  41. { .frequency = 203000000, .driver_data = PLLVAL(161, 3, 1), },
  42. /* 2410A extras */
  43. { .frequency = 210000000, .driver_data = PLLVAL(132, 2, 1), },
  44. { .frequency = 226000000, .driver_data = PLLVAL(105, 1, 1), },
  45. { .frequency = 266000000, .driver_data = PLLVAL(125, 1, 1), },
  46. { .frequency = 268000000, .driver_data = PLLVAL(126, 1, 1), },
  47. { .frequency = 270000000, .driver_data = PLLVAL(127, 1, 1), },
  48. };
  49. static int s3c2410_plls_add(struct device *dev, struct subsys_interface *sif)
  50. {
  51. return s3c_plltab_register(pll_vals_12MHz, ARRAY_SIZE(pll_vals_12MHz));
  52. }
  53. static struct subsys_interface s3c2410_plls_interface = {
  54. .name = "s3c2410_plls",
  55. .subsys = &s3c2410_subsys,
  56. .add_dev = s3c2410_plls_add,
  57. };
  58. static int __init s3c2410_pll_init(void)
  59. {
  60. return subsys_interface_register(&s3c2410_plls_interface);
  61. }
  62. arch_initcall(s3c2410_pll_init);
  63. static struct subsys_interface s3c2410a_plls_interface = {
  64. .name = "s3c2410a_plls",
  65. .subsys = &s3c2410a_subsys,
  66. .add_dev = s3c2410_plls_add,
  67. };
  68. static int __init s3c2410a_pll_init(void)
  69. {
  70. return subsys_interface_register(&s3c2410a_plls_interface);
  71. }
  72. arch_initcall(s3c2410a_pll_init);