ClkObj.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634
  1. #! /usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import re
  4. import string
  5. import ConfigParser
  6. import xml.dom.minidom
  7. from ModuleObj import ModuleObj
  8. from data.ClkData import ClkData
  9. from data.ClkData import OldClkData
  10. from data.ClkData import NewClkData
  11. from utility.util import log
  12. from utility.util import LogLevel
  13. from utility.util import sorted_key
  14. DEFAULT_AUTOK = 'AutoK'
  15. class ClkObj(ModuleObj):
  16. def __init__(self):
  17. ModuleObj.__init__(self, 'cust_clk_buf.h', 'cust_clk_buf.dtsi')
  18. #self.__prefix_cfg = 'driving_current_pmic_clk_buf'
  19. self._suffix = '_BUF'
  20. self.__count = -1
  21. def read(self, node):
  22. nodes = node.childNodes
  23. for node in nodes:
  24. if node.nodeType == xml.dom.Node.ELEMENT_NODE:
  25. if node.nodeName == 'count':
  26. continue
  27. varNode = node.getElementsByTagName('varName')
  28. curNode = node.getElementsByTagName('current')
  29. key = re.findall(r'\D+', node.nodeName)[0].upper() + self._suffix + '%s' %(re.findall(r'\d+', node.nodeName)[0])
  30. if key not in ModuleObj.get_data(self):
  31. continue;
  32. data = ModuleObj.get_data(self)[key]
  33. if len(varNode):
  34. data.set_varName(varNode[0].childNodes[0].nodeValue)
  35. if len(curNode):
  36. data.set_current(curNode[0].childNodes[0].nodeValue)
  37. ModuleObj.set_data(self, key, data)
  38. return True
  39. def get_cfgInfo(self):
  40. cp = ConfigParser.ConfigParser(allow_no_value=True)
  41. cp.read(ModuleObj.get_figPath())
  42. count = string.atoi(cp.get('CLK_BUF', 'CLK_BUF_COUNT'))
  43. self.__count = count
  44. ops = cp.options('CLK_BUF')
  45. for op in ops:
  46. if op == 'clk_buf_count':
  47. self.__count = string.atoi(cp.get('CLK_BUF', op))
  48. ClkData._count = string.atoi(cp.get('CLK_BUF', op))
  49. continue
  50. value = cp.get('CLK_BUF', op)
  51. var_list = value.split(':')
  52. data = OldClkData()
  53. data.set_curList(var_list[2:])
  54. data.set_defVarName(string.atoi(var_list[0]))
  55. data.set_defCurrent(string.atoi(var_list[1]))
  56. key = op[16:].upper()
  57. ModuleObj.set_data(self, key, data)
  58. def parse(self, node):
  59. self.get_cfgInfo()
  60. self.read(node)
  61. def gen_files(self):
  62. ModuleObj.gen_files(self)
  63. def fill_hFile(self):
  64. gen_str = '''typedef enum {\n'''
  65. gen_str += '''\tCLOCK_BUFFER_DISABLE,\n'''
  66. gen_str += '''\tCLOCK_BUFFER_SW_CONTROL,\n'''
  67. gen_str += '''\tCLOCK_BUFFER_HW_CONTROL\n'''
  68. gen_str += '''} MTK_CLK_BUF_STATUS;\n'''
  69. gen_str += '''\n'''
  70. gen_str += '''typedef enum {\n'''
  71. gen_str += '''\tCLK_BUF_DRIVING_CURR_AUTO_K = -1,\n'''
  72. gen_str += '''\tCLK_BUF_DRIVING_CURR_0,\n'''
  73. gen_str += '''\tCLK_BUF_DRIVING_CURR_1,\n'''
  74. gen_str += '''\tCLK_BUF_DRIVING_CURR_2,\n'''
  75. gen_str += '''\tCLK_BUF_DRIVING_CURR_3\n'''
  76. gen_str += '''} MTK_CLK_BUF_DRIVING_CURR;\n'''
  77. gen_str += '''\n'''
  78. for key in sorted_key(ModuleObj.get_data(self).keys()):
  79. value = ModuleObj.get_data(self)[key]
  80. gen_str += '''#define %s_STATUS_PMIC\t\tCLOCK_BUFFER_%s\n''' %(key[5:], value.get_varName().upper())
  81. gen_str += '''\n'''
  82. for key in sorted_key(ModuleObj.get_data(self).keys()):
  83. value = ModuleObj.get_data(self)[key]
  84. idx = value.get_curList().index(value.get_current())
  85. if cmp(value.get_curList()[0], DEFAULT_AUTOK) == 0:
  86. idx -= 1
  87. if idx >= 0:
  88. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_%d\n''' %(key, idx)
  89. else:
  90. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_AUTO_K\n''' %(key)
  91. gen_str += '''\n'''
  92. return gen_str
  93. def fill_dtsiFile(self):
  94. gen_str = '''&pmic_clock_buffer_ctrl {\n'''
  95. gen_str += '''\tmediatek,clkbuf-quantity = <%d>;\n''' %(self.__count)
  96. gen_str += '''\tmediatek,clkbuf-config = <'''
  97. #sorted_list = sorted(ModuleObj.get_data(self).keys())
  98. for key in sorted_key(ModuleObj.get_data(self).keys()):
  99. if key.find('PMIC') == -1:
  100. continue
  101. value = ModuleObj.get_data(self)[key]
  102. gen_str += '''%d ''' %(ClkData._varList.index(value.get_varName()))
  103. gen_str = gen_str.rstrip()
  104. gen_str += '''>;\n'''
  105. gen_str += '''\tmediatek,clkbuf-driving-current = <'''
  106. #sorted_list = sorted(ModuleObj.get_data(self).keys())
  107. for key in sorted_key(ModuleObj.get_data(self).keys()):
  108. if key.find('PMIC') == -1:
  109. continue
  110. value = ModuleObj.get_data(self)[key]
  111. idx = value.get_curList().index(value.get_current())
  112. if cmp(value.get_curList()[0], DEFAULT_AUTOK) == 0:
  113. idx -= 1
  114. if idx < 0:
  115. gen_str += '''(%d) ''' %(-1)
  116. else:
  117. gen_str += '''%d ''' %(idx)
  118. gen_str = gen_str.rstrip()
  119. gen_str += '''>;\n'''
  120. gen_str += '''\tstatus = \"okay\";\n'''
  121. gen_str += '''};\n'''
  122. return gen_str
  123. class ClkObj_Everest(ClkObj):
  124. def __init__(self):
  125. ClkObj.__init__(self)
  126. self.__rf = 'RF'
  127. self.__pmic = 'PMIC'
  128. def parse(self, node):
  129. ClkObj.parse(self, node)
  130. def gen_files(self):
  131. ClkObj.gen_files(self)
  132. def fill_hFile(self):
  133. gen_str = '''typedef enum {\n'''
  134. gen_str += '''\tCLOCK_BUFFER_DISABLE,\n'''
  135. gen_str += '''\tCLOCK_BUFFER_SW_CONTROL,\n'''
  136. gen_str += '''\tCLOCK_BUFFER_HW_CONTROL\n'''
  137. gen_str += '''} MTK_CLK_BUF_STATUS;\n'''
  138. gen_str += '''\n'''
  139. gen_str += '''typedef enum {\n'''
  140. gen_str += '''\tCLK_BUF_DRIVING_CURR_0_4MA,\n'''
  141. gen_str += '''\tCLK_BUF_DRIVING_CURR_0_9MA,\n'''
  142. gen_str += '''\tCLK_BUF_DRIVING_CURR_1_4MA,\n'''
  143. gen_str += '''\tCLK_BUF_DRIVING_CURR_1_9MA\n'''
  144. gen_str += '''} MTK_CLK_BUF_DRIVING_CURR;\n'''
  145. gen_str += '''\n'''
  146. for key in sorted_key(ModuleObj.get_data(self).keys()):
  147. value = ModuleObj.get_data(self)[key]
  148. if key.find(self.__pmic) != -1:
  149. gen_str += '''#define %s_STATUS_PMIC\t\t\t\tCLOCK_BUFFER_%s\n''' %(key[5:], value.get_varName())
  150. gen_str += '''\n'''
  151. for key in sorted_key(ModuleObj.get_data(self).keys()):
  152. value = ModuleObj.get_data(self)[key]
  153. if key.find(self.__pmic) != -1:
  154. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_%sMA\n''' %(key, value.get_current().replace('.', '_'))
  155. gen_str += '''\n'''
  156. for key in sorted_key(ModuleObj.get_data(self).keys()):
  157. value = ModuleObj.get_data(self)[key]
  158. if key.find(self.__rf) != -1:
  159. gen_str += '''#define %s_STATUS\t\tCLOCK_BUFFER_%s\n''' %(key[3:], value.get_varName())
  160. gen_str += '''\n'''
  161. for key in sorted_key(ModuleObj.get_data(self).keys()):
  162. value = ModuleObj.get_data(self)[key]
  163. if key.find(self.__rf) != -1:
  164. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_%sMA\n''' %(key, value.get_current().replace('.', '_'))
  165. gen_str += '''\n'''
  166. return gen_str
  167. def fill_dtsiFile(self):
  168. gen_str = ClkObj.fill_dtsiFile(self)
  169. gen_str += '''\n'''
  170. gen_str += '''&rf_clock_buffer_ctrl {\n'''
  171. gen_str += '''\tmediatek,clkbuf-quantity = <%d>;\n''' %(len(ModuleObj.get_data(self))-ClkData._count)
  172. msg = 'rf clk buff count : %d' %(len(ModuleObj.get_data(self))-ClkData._count)
  173. log(LogLevel.info, msg)
  174. gen_str += '''\tmediatek,clkbuf-config = <'''
  175. #sorted_list = sorted(ModuleObj.get_data(self).keys())
  176. for key in sorted_key(ModuleObj.get_data(self).keys()):
  177. value = ModuleObj.get_data(self)[key]
  178. if key.find(self.__rf) != -1:
  179. gen_str += '''%d ''' %(ClkData._varList.index(value.get_varName()))
  180. gen_str = gen_str.rstrip()
  181. gen_str += '''>;\n'''
  182. gen_str += '''\tmediatek,clkbuf-driving-current = <'''
  183. for key in sorted_key(ModuleObj.get_data(self).keys()):
  184. value = ModuleObj.get_data(self)[key]
  185. if key.find(self.__rf) != -1:
  186. idx = value.get_curList().index(value.get_current())
  187. if cmp(value.get_curList()[0], DEFAULT_AUTOK) == 0:
  188. idx -= 1
  189. gen_str += '''%d ''' %(idx)
  190. gen_str.rstrip()
  191. gen_str += '''>;\n'''
  192. gen_str += '''\tstatus = \"okay\";\n'''
  193. gen_str += '''};\n'''
  194. return gen_str
  195. class ClkObj_Olympus(ClkObj_Everest):
  196. def __init__(self):
  197. ClkObj_Everest.__init__(self)
  198. def get_cfgInfo(self):
  199. ClkObj_Everest.get_cfgInfo(self)
  200. def parse(self, node):
  201. ClkObj_Everest.parse(self, node)
  202. def gen_files(self):
  203. ClkObj_Everest.gen_files(self)
  204. def fill_hFile(self):
  205. gen_str = '''typedef enum {\n'''
  206. gen_str += '''\tCLOCK_BUFFER_DISABLE,\n'''
  207. gen_str += '''\tCLOCK_BUFFER_SW_CONTROL,\n'''
  208. gen_str += '''\tCLOCK_BUFFER_HW_CONTROL\n'''
  209. gen_str += '''} MTK_CLK_BUF_STATUS;\n'''
  210. gen_str += '''\n'''
  211. gen_str += '''typedef enum {\n'''
  212. gen_str += '''\tCLK_BUF_DRIVING_CURR_AUTO_K = -1,\n'''
  213. gen_str += '''\tCLK_BUF_DRIVING_CURR_0,\n'''
  214. gen_str += '''\tCLK_BUF_DRIVING_CURR_1,\n'''
  215. gen_str += '''\tCLK_BUF_DRIVING_CURR_2,\n'''
  216. gen_str += '''\tCLK_BUF_DRIVING_CURR_3\n'''
  217. gen_str += '''} MTK_CLK_BUF_DRIVING_CURR;\n'''
  218. gen_str += '''\n'''
  219. for key in sorted_key(ModuleObj.get_data(self).keys()):
  220. value = ModuleObj.get_data(self)[key]
  221. if key.find('PMIC') != -1:
  222. gen_str += '''#define %s_STATUS_PMIC\t\tCLOCK_BUFFER_%s\n''' %(key[5:], value.get_varName())
  223. gen_str += '''\n'''
  224. for key in sorted_key(ModuleObj.get_data(self).keys()):
  225. value = ModuleObj.get_data(self)[key]
  226. if key.find('RF') != -1:
  227. gen_str += '''#define %s_STATUS\t\t\t\tCLOCK_BUFFER_%s\n''' %(key[3:], value.get_varName())
  228. gen_str += '''\n'''
  229. for key in sorted_key(ModuleObj.get_data(self).keys()):
  230. if key.find('PMIC') != -1:
  231. continue
  232. value = ModuleObj.get_data(self)[key]
  233. idx = value.get_curList().index(value.get_current())
  234. if cmp(value.get_curList()[0], DEFAULT_AUTOK) == 0:
  235. idx -= 1
  236. if idx >= 0:
  237. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_%d\n''' %(key, idx)
  238. else:
  239. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_AUTO_K\n''' %(key)
  240. gen_str += '''\n'''
  241. for key in sorted_key(ModuleObj.get_data(self).keys()):
  242. if key.find('RF') != -1:
  243. continue
  244. value = ModuleObj.get_data(self)[key]
  245. idx = value.get_curList().index(value.get_current())
  246. if cmp(value.get_curList()[0], DEFAULT_AUTOK) == 0:
  247. idx -= 1
  248. if idx >= 0:
  249. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_%d\n''' %(key, idx)
  250. else:
  251. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_AUTO_K\n''' %(key)
  252. gen_str += '''\n'''
  253. return gen_str
  254. class ClkObj_Rushmore(ClkObj):
  255. def __init__(self):
  256. ClkObj.__init__(self)
  257. def parse(self, node):
  258. ClkObj.parse(self, node)
  259. def get_cfgInfo(self):
  260. cp = ConfigParser.ConfigParser(allow_no_value=True)
  261. cp.read(ModuleObj.get_figPath())
  262. count = string.atoi(cp.get('CLK_BUF', 'CLK_BUF_COUNT'))
  263. self.__count = count
  264. def read(self, node):
  265. nodes = node.childNodes
  266. for node in nodes:
  267. if node.nodeType == xml.dom.Node.ELEMENT_NODE:
  268. if node.nodeName == 'count':
  269. continue
  270. varNode = node.getElementsByTagName('varName')
  271. curNode = node.getElementsByTagName('current')
  272. key = re.findall(r'\D+', node.nodeName)[0].upper() + self._suffix + '%s' %(re.findall(r'\d+', node.nodeName)[0])
  273. data = OldClkData()
  274. if len(varNode):
  275. data.set_varName(varNode[0].childNodes[0].nodeValue)
  276. #if len(curNode):
  277. #data.set_current(curNode[0].childNodes[0].nodeValue)
  278. ModuleObj.set_data(self, key, data)
  279. return True
  280. def fill_hFile(self):
  281. gen_str = '''typedef enum {\n'''
  282. gen_str += '''\tCLOCK_BUFFER_DISABLE,\n'''
  283. gen_str += '''\tCLOCK_BUFFER_SW_CONTROL,\n'''
  284. gen_str += '''\tCLOCK_BUFFER_HW_CONTROL\n'''
  285. gen_str += '''} MTK_CLK_BUF_STATUS;\n'''
  286. gen_str += '''\n'''
  287. gen_str += '''typedef enum {\n'''
  288. gen_str += '''\tCLK_BUF_DRIVING_CURR_AUTO_K = -1,\n'''
  289. gen_str += '''\tCLK_BUF_DRIVING_CURR_0,\n'''
  290. gen_str += '''\tCLK_BUF_DRIVING_CURR_1,\n'''
  291. gen_str += '''\tCLK_BUF_DRIVING_CURR_2,\n'''
  292. gen_str += '''\tCLK_BUF_DRIVING_CURR_3\n'''
  293. gen_str += '''} MTK_CLK_BUF_DRIVING_CURR;\n'''
  294. gen_str += '''\n'''
  295. for key in sorted_key(ModuleObj.get_data(self).keys()):
  296. value = ModuleObj.get_data(self)[key]
  297. if key.find('RF') != -1:
  298. gen_str += '''#define %s_STATUS\t\t\t\tCLOCK_BUFFER_%s\n''' %(key[3:], value.get_varName())
  299. gen_str += '''\n'''
  300. for key in sorted_key(ModuleObj.get_data(self).keys()):
  301. if key.find('RF') != -1:
  302. continue
  303. value = ModuleObj.get_data(self)[key]
  304. idx = value.get_curList().index(value.get_current())
  305. if cmp(value.get_curList()[0], DEFAULT_AUTOK) == 0:
  306. idx -= 1
  307. if idx >= 0:
  308. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_%d\n''' %(key, idx)
  309. else:
  310. gen_str += '''#define %s_DRIVING_CURR\t\tCLK_BUF_DRIVING_CURR_AUTO_K\n''' %(key)
  311. gen_str += '''\n'''
  312. return gen_str
  313. def fill_dtsiFile(self):
  314. gen_str = '''&rf_clock_buffer_ctrl {\n'''
  315. gen_str += '''\tmediatek,clkbuf-quantity = <%d>;\n''' %(self.__count)
  316. gen_str += '''\tmediatek,clkbuf-config = <'''
  317. #sorted_list = sorted(ModuleObj.get_data(self).keys())
  318. for key in sorted_key(ModuleObj.get_data(self).keys()):
  319. if key.find('RF') == -1:
  320. continue
  321. value = ModuleObj.get_data(self)[key]
  322. gen_str += '''%d ''' %(ClkData._varList.index(value.get_varName()))
  323. gen_str = gen_str.rstrip()
  324. gen_str += '''>;\n'''
  325. gen_str += '''\tstatus = \"okay\";\n'''
  326. gen_str += '''};\n'''
  327. return gen_str
  328. class ClkObj_MT6779(ClkObj):
  329. def __init__(self):
  330. ClkObj.__init__(self)
  331. def read(self, node):
  332. nodes = node.childNodes
  333. for node in nodes:
  334. if node.nodeType == xml.dom.Node.ELEMENT_NODE:
  335. if node.nodeName == 'count':
  336. continue
  337. key = re.findall(r'\D+', node.nodeName)[0].upper() + self._suffix + '%s' % (re.findall(r'\d+', node.nodeName)[0])
  338. if key not in ModuleObj.get_data(self):
  339. continue
  340. data = ModuleObj.get_data(self)[key]
  341. var_name_node = node.getElementsByTagName('varName')
  342. cur_buf_node = node.getElementsByTagName('cur_buf_output')
  343. cur_driving_node = node.getElementsByTagName('cur_driving_control')
  344. if len(var_name_node):
  345. data.set_varName(var_name_node[0].childNodes[0].nodeValue)
  346. if len(cur_buf_node):
  347. data.cur_buf_output = cur_buf_node[0].childNodes[0].nodeValue
  348. if len(cur_driving_node):
  349. data.cur_driving_control = cur_driving_node[0].childNodes[0].nodeValue
  350. ModuleObj.set_data(self, key, data)
  351. return True
  352. def get_cfgInfo(self):
  353. cp = ConfigParser.ConfigParser(allow_no_value=True)
  354. cp.read(ModuleObj.get_figPath())
  355. max_count = self.get_max_count(cp)
  356. self.__count = max_count
  357. ClkData._count = max_count
  358. ops = cp.options('CLK_BUF')
  359. for op in ops:
  360. if op == 'clk_buf_count':
  361. continue
  362. value = cp.get('CLK_BUF', op)
  363. var_list = value.split(r'/')
  364. data = NewClkData()
  365. data.set_defVarName(string.atoi(var_list[0]))
  366. buf_output_list = var_list[1].split(r":")
  367. # only -1 means no data
  368. if len(buf_output_list) > 1:
  369. data.cur_buf_output_list = buf_output_list[1:]
  370. data.set_def_buf_output(string.atoi(buf_output_list[0]))
  371. driving_control_list = var_list[2].split(r":")
  372. # only -1 means no data
  373. if len(driving_control_list) > 1:
  374. data.cur_driving_control_list = driving_control_list[1:]
  375. data.set_def_driving_control(string.atoi(driving_control_list[0]))
  376. key = op[16:].upper()
  377. ModuleObj.set_data(self, key, data)
  378. # generate some dummy data, used for generating dtsi file
  379. for i in range(max_count):
  380. key = "PMIC_CLK_BUF" + "%s" % (i + 1)
  381. if key not in ModuleObj.get_data(self).keys():
  382. data = NewClkData()
  383. ModuleObj.set_data(self, key, data)
  384. def fill_hFile(self):
  385. gen_str = '''typedef enum {\n'''
  386. gen_str += '''\tCLOCK_BUFFER_DISABLE,\n'''
  387. gen_str += '''\tCLOCK_BUFFER_SW_CONTROL,\n'''
  388. gen_str += '''\tCLOCK_BUFFER_HW_CONTROL\n'''
  389. gen_str += '''} MTK_CLK_BUF_STATUS;\n'''
  390. gen_str += '''\n'''
  391. gen_str += '''typedef enum {\n'''
  392. gen_str += '''\tCLK_BUF_OUTPUT_IMPEDANCE_0,\n'''
  393. gen_str += '''\tCLK_BUF_OUTPUT_IMPEDANCE_1,\n'''
  394. gen_str += '''\tCLK_BUF_OUTPUT_IMPEDANCE_2,\n'''
  395. gen_str += '''\tCLK_BUF_OUTPUT_IMPEDANCE_3,\n'''
  396. gen_str += '''\tCLK_BUF_OUTPUT_IMPEDANCE_4,\n'''
  397. gen_str += '''\tCLK_BUF_OUTPUT_IMPEDANCE_5,\n'''
  398. gen_str += '''\tCLK_BUF_OUTPUT_IMPEDANCE_6,\n'''
  399. gen_str += '''\tCLK_BUF_OUTPUT_IMPEDANCE_7\n'''
  400. gen_str += '''} MTK_CLK_BUF_OUTPUT_IMPEDANCE;\n'''
  401. gen_str += '''\n'''
  402. gen_str += '''typedef enum {\n'''
  403. gen_str += '''\tCLK_BUF_CONTROLS_FOR_DESENSE_0,\n'''
  404. gen_str += '''\tCLK_BUF_CONTROLS_FOR_DESENSE_1,\n'''
  405. gen_str += '''\tCLK_BUF_CONTROLS_FOR_DESENSE_2,\n'''
  406. gen_str += '''\tCLK_BUF_CONTROLS_FOR_DESENSE_3,\n'''
  407. gen_str += '''\tCLK_BUF_CONTROLS_FOR_DESENSE_4,\n'''
  408. gen_str += '''\tCLK_BUF_CONTROLS_FOR_DESENSE_5,\n'''
  409. gen_str += '''\tCLK_BUF_CONTROLS_FOR_DESENSE_6,\n'''
  410. gen_str += '''\tCLK_BUF_CONTROLS_FOR_DESENSE_7\n'''
  411. gen_str += '''} MTK_CLK_BUF_CONTROLS_FOR_DESENSE;\n'''
  412. gen_str += '''\n'''
  413. for key in sorted_key(ModuleObj.get_data(self).keys()):
  414. value = ModuleObj.get_data(self)[key]
  415. if len(value.get_varName()):
  416. gen_str += '''#define %s_STATUS_PMIC\t\tCLOCK_BUFFER_%s\n''' % (key[5:], value.get_varName().upper())
  417. gen_str += '''\n'''
  418. for key in sorted_key(ModuleObj.get_data(self).keys()):
  419. value = ModuleObj.get_data(self)[key]
  420. if len(value.cur_buf_output_list) and len(value.cur_buf_output):
  421. idx = value.cur_buf_output_list.index(value.cur_buf_output)
  422. gen_str += '''#define %s_OUTPUT_IMPEDANCE\t\tCLK_BUF_OUTPUT_IMPEDANCE_%d\n''' % (key, idx)
  423. gen_str += '''\n'''
  424. for key in sorted_key(ModuleObj.get_data(self).keys()):
  425. value = ModuleObj.get_data(self)[key]
  426. if len(value.cur_driving_control_list) and len(value.cur_driving_control):
  427. idx = value.cur_driving_control_list.index(value.cur_driving_control)
  428. gen_str += '''#define %s_CONTROLS_FOR_DESENSE\t\tCLK_BUF_CONTROLS_FOR_DESENSE_%d\n''' % (key, idx)
  429. gen_str += '''\n'''
  430. return gen_str
  431. def fill_dtsiFile(self):
  432. gen_str = '''&pmic_clock_buffer_ctrl {\n'''
  433. gen_str += '''\tmediatek,clkbuf-quantity = <%d>;\n''' % self.__count
  434. gen_str += '''\tmediatek,clkbuf-config = <'''
  435. for key in sorted_key(ModuleObj.get_data(self).keys()):
  436. if key.find('PMIC') == -1:
  437. continue
  438. value = ModuleObj.get_data(self)[key]
  439. if len(value.get_varName()):
  440. gen_str += '''%d ''' % (ClkData._varList.index(value.get_varName()))
  441. else:
  442. gen_str += '''%d ''' % 0
  443. gen_str = gen_str.rstrip()
  444. gen_str += '''>;\n'''
  445. gen_str += '''\tmediatek,clkbuf-output-impedance = <'''
  446. for key in sorted_key(ModuleObj.get_data(self).keys()):
  447. if key.find('PMIC') == -1:
  448. continue
  449. value = ModuleObj.get_data(self)[key]
  450. if len(value.cur_buf_output_list) and len(value.cur_buf_output):
  451. idx = value.cur_buf_output_list.index(value.cur_buf_output)
  452. gen_str += '''%d ''' % idx
  453. else:
  454. gen_str += '''%d ''' % 0
  455. gen_str = gen_str.rstrip()
  456. gen_str += '''>;\n'''
  457. gen_str += '''\tmediatek,clkbuf-controls-for-desense = <'''
  458. for key in sorted_key(ModuleObj.get_data(self).keys()):
  459. if key.find('PMIC') == -1:
  460. continue
  461. value = ModuleObj.get_data(self)[key]
  462. if len(value.cur_driving_control_list) and len(value.cur_driving_control):
  463. idx = value.cur_driving_control_list.index(value.cur_driving_control)
  464. gen_str += '''%d ''' % idx
  465. else:
  466. gen_str += '''%d ''' % 0
  467. gen_str = gen_str.rstrip()
  468. gen_str += '''>;\n'''
  469. gen_str += '''\tstatus = \"okay\";\n'''
  470. gen_str += '''};\n'''
  471. return gen_str
  472. @staticmethod
  473. def get_max_count(fig):
  474. if fig.has_section("CLK_BUF_EX_PIN"):
  475. max_count = -1
  476. options = fig.options("CLK_BUF_EX_PIN")
  477. for option in options:
  478. cur_count = fig.getint("CLK_BUF_EX_PIN", option)
  479. max_count = max(cur_count, max_count)
  480. return max_count
  481. else:
  482. return fig.getint('CLK_BUF', 'CLK_BUF_COUNT')