Md1EintObj.py 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #! /usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import ConfigParser
  4. import string
  5. import xml.dom.minidom
  6. from itertools import dropwhile
  7. import re
  8. from utility import util
  9. from utility.util import sorted_key
  10. from ModuleObj import ModuleObj
  11. from data.Md1EintData import Md1EintData
  12. from utility.util import LogLevel
  13. class Md1EintObj(ModuleObj):
  14. def __init__(self):
  15. ModuleObj.__init__(self, 'cust_eint_md1.h', 'cust_md1_eint.dtsi')
  16. self.__srcPin = {}
  17. self.__bSrcPinEnable = True
  18. def get_cfgInfo(self):
  19. # ConfigParser accept ":" and "=", so SRC_PIN will be treated specially
  20. cp = ConfigParser.ConfigParser(allow_no_value=True)
  21. cp.read(ModuleObj.get_figPath())
  22. if cp.has_option('Chip Type', 'MD1_EINT_SRC_PIN'):
  23. flag = cp.get('Chip Type', 'MD1_EINT_SRC_PIN')
  24. if flag == '0':
  25. self.__bSrcPinEnable = False
  26. if(self.__bSrcPinEnable):
  27. #for option in cp.options('SRC_PIN'):
  28. #value = cp.get('SRC_PIN', option)
  29. #value = value[1:]
  30. #temp = value.split('=')
  31. #self.__srcPin[temp[0]] = temp[1]
  32. with open(ModuleObj.get_figPath()) as file:
  33. src_pin_expr = r"^.+\s*::\s*(\w+)\s*=\s*(\w+)\s*$"
  34. reg = re.compile(src_pin_expr)
  35. for line in dropwhile(lambda line: not line.lstrip().startswith("[SRC_PIN]"), file):
  36. match_obj = reg.match(line)
  37. if match_obj:
  38. self.__srcPin[match_obj.group(1)] = match_obj.group(2)
  39. else:
  40. self.__srcPin[''] = '-1'
  41. def read(self, node):
  42. nodes = node.childNodes
  43. try:
  44. for node in nodes:
  45. if node.nodeType == xml.dom.Node.ELEMENT_NODE:
  46. if cmp(node.nodeName, 'count') == 0:
  47. self.__count = node.childNodes[0].nodeValue
  48. continue
  49. varNode = node.getElementsByTagName('varName')
  50. detNode = node.getElementsByTagName('debounce_time')
  51. polNode = node.getElementsByTagName('polarity')
  52. senNode = node.getElementsByTagName('sensitive_level')
  53. deeNode = node.getElementsByTagName('debounce_en')
  54. dedNode = node.getElementsByTagName('dedicated_en')
  55. srcNode = node.getElementsByTagName('srcPin')
  56. sktNode = node.getElementsByTagName('socketType')
  57. data = Md1EintData()
  58. if len(varNode):
  59. data.set_varName(varNode[0].childNodes[0].nodeValue)
  60. if len(detNode):
  61. data.set_debounceTime(detNode[0].childNodes[0].nodeValue)
  62. if len(polNode):
  63. data.set_polarity(polNode[0].childNodes[0].nodeValue)
  64. if len(senNode):
  65. data.set_sensitiveLevel(senNode[0].childNodes[0].nodeValue)
  66. if len(deeNode):
  67. data.set_debounceEnable(deeNode[0].childNodes[0].nodeValue)
  68. if len(dedNode):
  69. data.set_dedicatedEn(dedNode[0].childNodes[0].nodeValue)
  70. if len(srcNode) and len(srcNode[0].childNodes):
  71. data.set_srcPin(srcNode[0].childNodes[0].nodeValue)
  72. if len(sktNode) and len(sktNode[0].childNodes):
  73. data.set_socketType(sktNode[0].childNodes[0].nodeValue)
  74. ModuleObj.set_data(self, node.nodeName, data)
  75. except:
  76. msg = 'read md1_eint content fail!'
  77. util.log(LogLevel.error, msg)
  78. return False
  79. return True
  80. def parse(self, node):
  81. self.get_cfgInfo()
  82. self.read(node)
  83. def gen_files(self):
  84. ModuleObj.gen_files(self)
  85. def fill_hFile(self):
  86. gen_str = ''
  87. gen_str += '''#define CUST_EINT_MD_LEVEL_SENSITIVE\t\t0\n'''
  88. gen_str += '''#define CUST_EINT_MD_EDGE_SENSITIVE\t\t1\n'''
  89. gen_str += '''\n'''
  90. if self.__bSrcPinEnable:
  91. for (key, value) in self.__srcPin.items():
  92. gen_str += '''#define %s\t\t%s\n''' %(key, value)
  93. gen_str += '''\n'''
  94. gen_str += '''#define CUST_EINT_POLARITY_LOW\t\t0\n'''
  95. gen_str += '''#define CUST_EINT_POLARITY_HIGH\t\t1\n'''
  96. gen_str += '''\n'''
  97. gen_str += '''#define CUST_EINT_LEVEL_SENSITIVE\t\t0\n'''
  98. gen_str += '''#define CUST_EINT_EDGE_SENSITIVE\t\t1\n'''
  99. gen_str += '''\n'''
  100. count = 0
  101. for key in sorted_key(ModuleObj.get_data(self).keys()):
  102. value = ModuleObj.get_data(self)[key]
  103. if cmp(value.get_varName(), 'NC') == 0:
  104. continue
  105. num = key[4:]
  106. count += 1
  107. gen_str += '''#define CUST_EINT_MD1_%s_NAME\t\t\t"%s"\n''' %(num, value.get_varName())
  108. gen_str += '''#define CUST_EINT_MD1_%s_NUM\t\t\t%s\n''' %(num, num)
  109. gen_str += '''#define CUST_EINT_MD1_%s_DEBOUNCE_CN\t\t%s\n''' %(num, value.get_debounceTime())
  110. gen_str += '''#define CUST_EINT_MD1_%s_POLARITY\t\tCUST_EINT_POLARITY_%s\n''' %(num, value.get_polarity().upper())
  111. gen_str += '''#define CUST_EINT_MD1_%s_SENSITIVE\t\tCUST_EINT_MD_%s_SENSITIVE\n''' %(num, value.get_sensitiveLevel().upper())
  112. gen_str += '''#define CUST_EINT_MD1_%s_DEBOUNCE_EN\t\tCUST_EINT_DEBOUNCE_%s\n''' %(num, value.get_debounceEnable().upper())
  113. gen_str += '''#define CUST_EINT_MD1_%s_DEDICATED_EN\t\t%s\n''' %(num, int(value.get_dedicatedEn()))
  114. if self.__bSrcPinEnable:
  115. gen_str += '''#define CUST_EINT_MD1_%s_SRCPIN\t\t\t%s\n''' %(num, value.get_srcPin())
  116. gen_str += '''\n'''
  117. gen_str += '''#define CUST_EINT_MD1_CNT\t\t\t%d\n''' %(count)
  118. return gen_str
  119. def fill_dtsiFile(self):
  120. gen_str = ''
  121. gen_str += '''&eintc {\n'''
  122. for key in sorted_key(ModuleObj.get_data(self).keys()):
  123. value = ModuleObj.get_data(self)[key]
  124. if cmp(value.get_varName(), 'NC') == 0:
  125. continue
  126. num = key[4:]
  127. gen_str += '''\t%s@%s {\n''' %(value.get_varName(), num)
  128. gen_str += '''\t\tcompatible = \"mediatek,%s-eint\";\n''' %(value.get_varName())
  129. type = 1
  130. polarity = value.get_polarity()
  131. sensitive = value.get_sensitiveLevel()
  132. if cmp(polarity, 'High') == 0 and cmp(sensitive, 'Edge') == 0:
  133. type = 1
  134. elif cmp(polarity, 'Low') == 0 and cmp(sensitive, 'Edge') == 0:
  135. type = 2
  136. elif cmp(polarity, 'High') == 0 and cmp(sensitive, 'Level') == 0:
  137. type = 4
  138. elif cmp(polarity, 'Low') == 0 and cmp(sensitive, 'Level') == 0:
  139. type = 8
  140. gen_str += '''\t\tinterrupts = <%s %d>;\n''' %(num, type)
  141. gen_str += '''\t\tdebounce = <%s %d>;\n''' %(num, (string.atoi(value.get_debounceTime()))*1000)
  142. gen_str += '''\t\tdedicated = <%s %d>;\n''' %(num, int(value.get_dedicatedEn()))
  143. if self.__bSrcPinEnable:
  144. gen_str += '''\t\tsrc_pin = <%s %s>;\n''' %(num, self.__srcPin[value.get_srcPin()])
  145. else:
  146. gen_str += '''\t\tsrc_pin = <%s %s>;\n''' %(num, -1)
  147. gen_str += '''\t\tsockettype = <%s %s>;\n''' %(num, value.get_socketType())
  148. gen_str += '''\t\tstatus = \"okay\";\n'''
  149. gen_str += '''\t};\n'''
  150. gen_str += '''\n'''
  151. gen_str += '''};\n'''
  152. return gen_str
  153. def get_srcPin(self):
  154. return self.__srcPin
  155. def get_srcPinEnable(self):
  156. return self.__bSrcPinEnable
  157. class Md1EintObj_MT6739(Md1EintObj):
  158. def __init__(self):
  159. Md1EintObj.__init__(self)
  160. def fill_dtsiFile(self):
  161. gen_str = ''
  162. for key in sorted_key(ModuleObj.get_data(self).keys()):
  163. value = ModuleObj.get_data(self)[key]
  164. if cmp(value.get_varName(), 'NC') == 0:
  165. continue
  166. num = key[4:]
  167. gen_str += '''&%s {\n''' % (value.get_varName().lower())
  168. gen_str += '''\tcompatible = \"mediatek,%s-eint\";\n''' % (value.get_varName().lower())
  169. type = 1
  170. polarity = value.get_polarity()
  171. sensitive = value.get_sensitiveLevel()
  172. if cmp(polarity, 'High') == 0 and cmp(sensitive, 'Edge') == 0:
  173. type = 1
  174. elif cmp(polarity, 'Low') == 0 and cmp(sensitive, 'Edge') == 0:
  175. type = 2
  176. elif cmp(polarity, 'High') == 0 and cmp(sensitive, 'Level') == 0:
  177. type = 4
  178. elif cmp(polarity, 'Low') == 0 and cmp(sensitive, 'Level') == 0:
  179. type = 8
  180. gen_str += '''\tinterrupts = <%s %d>;\n''' % (num, type)
  181. gen_str += '''\tdebounce = <%s %d>;\n''' % (num, (string.atoi(value.get_debounceTime())) * 1000)
  182. gen_str += '''\tdedicated = <%s %d>;\n''' % (num, int(value.get_dedicatedEn()))
  183. if self.get_srcPinEnable():
  184. gen_str += '''\tsrc_pin = <%s %s>;\n''' % (num, self.get_srcPin()[value.get_srcPin()])
  185. else:
  186. gen_str += '''\tsrc_pin = <%s %s>;\n''' % (num, -1)
  187. gen_str += '''\tsockettype = <%s %s>;\n''' % (num, value.get_socketType())
  188. gen_str += '''\tstatus = \"okay\";\n'''
  189. gen_str += '''};\n'''
  190. gen_str += '''\n'''
  191. return gen_str