PmicObj.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. #! /usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import sys, os
  4. import re
  5. import ConfigParser
  6. import xml.dom.minidom
  7. from ModuleObj import ModuleObj
  8. from data.PmicData import PmicData
  9. from utility.util import log
  10. from utility.util import LogLevel
  11. from utility.util import compare
  12. from utility.util import sorted_key
  13. class PmicObj(ModuleObj):
  14. def __init__(self):
  15. ModuleObj.__init__(self, 'pmic_drv.h', 'cust_pmic.dtsi')
  16. self.__fileName = 'pmic_drv.c'
  17. self.__chipName = ''
  18. self.__defLdo = ''
  19. self.__appCount = -1
  20. self.__func = ''
  21. self.__paraList = []
  22. self.__headerList = []
  23. def get_cfgInfo(self):
  24. cp = ConfigParser.ConfigParser(allow_no_value=True)
  25. cp.read(ModuleObj.get_cmpPath())
  26. PmicData._var_list = cp.options('APPLICATION')
  27. if self.__chipName == '':
  28. return
  29. #parse the pmic config file
  30. cmpPath = os.path.join(sys.path[0], 'config', self.__chipName + '.cmp')
  31. if not os.path.exists(cmpPath) or not os.path.isfile(cmpPath):
  32. log(LogLevel.error, 'Can not find %s pmic config file!' %(self.__chipName))
  33. sys.exit(-1)
  34. cp.read(cmpPath)
  35. self.__defLdo = cp.get('PMIC_TABLE', 'LDO_APPNAME_DEFAULT')
  36. self.__headerList = cp.get('PMIC_TABLE', 'INCLUDE_HEADER').split(':')
  37. self.__func = cp.get('PMIC_TABLE', 'FUNCTION')
  38. for i in range(1, cp.getint('PMIC_TABLE', 'NUM_LDO')+1):
  39. key = 'LDO_NAME%d' %(i)
  40. self.__paraList.append(cp.get(key, 'PARAMETER_NAME'))
  41. #parse app count in fig file
  42. cp.read(ModuleObj.get_chipId() + '.fig')
  43. cp.read(ModuleObj.get_figPath())
  44. self.__appCount = cp.getint('Chip Type', 'PMIC_APP_COUNT')
  45. def read(self, node):
  46. nodes = node.childNodes
  47. for node in nodes:
  48. if node.nodeType == xml.dom.Node.ELEMENT_NODE:
  49. if cmp(node.nodeName, 'chip') == 0:
  50. if len(node.childNodes) == 0:
  51. break
  52. self.__chipName = node.childNodes[0].nodeValue
  53. continue
  54. if cmp(node.nodeName, 'count') == 0:
  55. continue
  56. ldoNode = node.getElementsByTagName('ldoVar')
  57. defNode = node.getElementsByTagName('defEn')
  58. data = PmicData()
  59. if len(ldoNode):
  60. data.set_ldoName(ldoNode[0].childNodes[0].nodeValue)
  61. if len(defNode):
  62. number = -1
  63. if cmp(defNode[0].childNodes[0].nodeValue, 'SKIP') == 0:
  64. number = 0
  65. elif cmp(defNode[0].childNodes[0].nodeValue, 'OFF') == 0:
  66. number = 1
  67. else:
  68. number = 2
  69. data.set_defEnable(number)
  70. name_list = []
  71. for i in range(0, 6):
  72. key = 'varName%d' %(i)
  73. nameNode = node.getElementsByTagName(key)
  74. if len(nameNode):
  75. name_list.append(nameNode[0].childNodes[0].nodeValue)
  76. data.set_nameList(name_list)
  77. ModuleObj.set_data(self, node.nodeName, data)
  78. return True
  79. def parse(self, node):
  80. self.read(node)
  81. self.get_cfgInfo()
  82. def gen_files(self):
  83. ModuleObj.gen_files(self)
  84. self.gen_cFile()
  85. def gen_cFile(self):
  86. fp = open(os.path.join(ModuleObj.get_genPath(), self.__fileName), 'w')
  87. gen_str = ''
  88. gen_str += ModuleObj.writeComment()
  89. gen_str += self.fill_cFile()
  90. fp.write(gen_str)
  91. fp.close()
  92. def fill_hFile(self):
  93. gen_str = ''
  94. used = []
  95. for key in sorted_key(ModuleObj.get_data(self).keys()):
  96. value = ModuleObj.get_data(self)[key]
  97. for name in value.get_nameList():
  98. if name.strip() != '':
  99. used.append(name)
  100. gen_str += '''#define PMIC_APP_%s\t\t\t%s_POWER_LDO_%s\n''' %(name, self.__chipName[5:11], value.get_ldoName())
  101. gen_str += '''\n'''
  102. gen_str += '''/**********Output default name********************/\n'''
  103. for varName in PmicData._var_list:
  104. if not varName.upper() in used:
  105. gen_str += '''#define PMIC_APP_%s\t\t\t%s\n''' %(varName.upper(), self.__defLdo)
  106. return gen_str
  107. def fill_dtsiFile(self):
  108. gen_str = ''
  109. for key in sorted_key(ModuleObj.get_data(self).keys()):
  110. value = ModuleObj.get_data(self)[key]
  111. gen_str += '''&mt_pmic_%s_ldo_reg {\n''' %(value.get_ldoName().lower())
  112. gen_str += '''\tregulator-name = \"%s\";\n''' %((value.get_ldoName().replace('_', '')).lower())
  113. gen_str += '''\tregulator-default-on = <%d>; /* 0:skip, 1: off, 2:on */\n''' %(value.get_defEnable())
  114. gen_str += '''\tstatus = \"okay\";\n'''
  115. gen_str += '''};\n'''
  116. gen_str += '''\n'''
  117. gen_str += '''&kd_camera_hw1 {\n'''
  118. for key in sorted_key(ModuleObj.get_data(self).keys()):
  119. value = ModuleObj.get_data(self)[key]
  120. for varName in value.get_nameList():
  121. #for i in range(0, self.__appCount):
  122. bExisted = False
  123. postFix = ''
  124. #varName = value.get_nameList()[i]
  125. if varName.find('CAMERA') != -1:
  126. postFix = varName[varName.rfind('_')+1:]
  127. bExisted = True
  128. if varName.find('MAIN_CAMERA') != -1:
  129. gen_str += '''\tvcam%s-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(postFix.lower(), value.get_ldoName().lower())
  130. if varName.find('SUB_CAMERA') != -1:
  131. gen_str += '''\tvcam%s_main2-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(postFix.lower(), value.get_ldoName().lower())
  132. gen_str += '''\tvcam%s_sub-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(postFix.lower(), value.get_ldoName().lower())
  133. #if bExisted == True:
  134. #gen_str += '''\n'''
  135. gen_str += '''\tstatus = \"okay\";\n'''
  136. gen_str += '''};\n\n'''
  137. gen_str += '''&touch {\n'''
  138. for key in sorted_key(ModuleObj.get_data(self).keys()):
  139. value = ModuleObj.get_data(self)[key]
  140. for name in value.get_nameList():
  141. if name.find('TOUCH') != -1:
  142. gen_str += '''\tvtouch-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(value.get_ldoName().lower())
  143. gen_str += '''\tstatus = \"okay\";\n'''
  144. gen_str += '''};\n'''
  145. return gen_str
  146. def fill_cFile(self):
  147. gen_str = ''
  148. for header in self.__headerList:
  149. gen_str += '''#include <%s>\n''' %(header)
  150. gen_str += '''\n'''
  151. gen_str += '''void pmu_drv_tool_customization_init(void)\n'''
  152. gen_str += '''{\n'''
  153. idx = 0
  154. for key in sorted_key(ModuleObj.get_data(self).keys()):
  155. value = ModuleObj.get_data(self)[key]
  156. if value.get_defEnable() != 0:
  157. gen_str += '''\t%s(%s,%d);\n''' %(self.__func, self.__paraList[idx], value.get_defEnable()-1)
  158. idx += 1
  159. gen_str += '''}\n'''
  160. return gen_str
  161. class PmicObj_MT6758(PmicObj):
  162. def __init__(self):
  163. PmicObj.__init__(self)
  164. def parse(self, node):
  165. PmicObj.parse(self, node)
  166. def gen_files(self):
  167. PmicObj.gen_files(self)
  168. def gen_spec(self, para):
  169. PmicObj.gen_spec(self, para)
  170. def fill_dtsiFile(self):
  171. gen_str = ''
  172. for key in sorted_key(ModuleObj.get_data(self).keys()):
  173. value = ModuleObj.get_data(self)[key]
  174. gen_str += '''&mt_pmic_%s_ldo_reg {\n''' %(value.get_ldoName().lower())
  175. gen_str += '''\tregulator-name = \"%s\";\n''' %((value.get_ldoName().replace('_', '')).lower())
  176. gen_str += '''\tregulator-default-on = <%d>; /* 0:skip, 1: off, 2:on */\n''' %(value.get_defEnable())
  177. gen_str += '''\tstatus = \"okay\";\n'''
  178. gen_str += '''};\n'''
  179. gen_str += '''\n'''
  180. gen_str += '''&kd_camera_hw1 {\n'''
  181. for key in sorted_key(ModuleObj.get_data(self).keys()):
  182. value = ModuleObj.get_data(self)[key]
  183. for varName in value.get_nameList():
  184. #for i in range(0, self.__appCount):
  185. bExisted = False
  186. postFix = ''
  187. #varName = value.get_nameList()[i]
  188. if varName.find('CAMERA') != -1:
  189. postFix = varName[varName.rfind('_')+1:]
  190. bExisted = True
  191. if varName.find('MAIN_CAMERA_3') != -1:
  192. gen_str += '''\tvcam%s_main3-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(postFix.lower(), value.get_ldoName().lower())
  193. elif varName.find('MAIN_CAMERA_2') != -1:
  194. gen_str += '''\tvcam%s_main2-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(postFix.lower(), value.get_ldoName().lower())
  195. elif varName.find('MAIN_CAMERA') != -1:
  196. gen_str += '''\tvcam%s-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(postFix.lower(), value.get_ldoName().lower())
  197. elif varName.find('SUB_CAMERA_2') != -1:
  198. gen_str += '''\tvcam%s_sub2-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(postFix.lower(), value.get_ldoName().lower())
  199. elif varName.find('SUB_CAMERA') != -1:
  200. #gen_str += '''\tvcam%s_main2-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(postFix.lower(), value.get_ldoName().lower())
  201. gen_str += '''\tvcam%s_sub-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(postFix.lower(), value.get_ldoName().lower())
  202. #if bExisted == True:
  203. #gen_str += '''\n'''
  204. gen_str += '''\tstatus = \"okay\";\n'''
  205. gen_str += '''};\n\n'''
  206. gen_str += '''&touch {\n'''
  207. for key in sorted_key(ModuleObj.get_data(self).keys()):
  208. value = ModuleObj.get_data(self)[key]
  209. for name in value.get_nameList():
  210. if name.find('TOUCH') != -1:
  211. gen_str += '''\tvtouch-supply = <&mt_pmic_%s_ldo_reg>;\n''' %(value.get_ldoName().lower())
  212. gen_str += '''\tstatus = \"okay\";\n'''
  213. gen_str += '''};\n'''
  214. return gen_str