| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- #! /usr/bin/python
- # -*- coding: utf-8 -*-
- import ConfigParser
- import string
- import xml.dom.minidom
- from itertools import dropwhile
- import re
- from utility import util
- from utility.util import sorted_key
- from ModuleObj import ModuleObj
- from data.Md1EintData import Md1EintData
- from utility.util import LogLevel
- class Md1EintObj(ModuleObj):
- def __init__(self):
- ModuleObj.__init__(self, 'cust_eint_md1.h', 'cust_md1_eint.dtsi')
- self.__srcPin = {}
- self.__bSrcPinEnable = True
- def get_cfgInfo(self):
- # ConfigParser accept ":" and "=", so SRC_PIN will be treated specially
- cp = ConfigParser.ConfigParser(allow_no_value=True)
- cp.read(ModuleObj.get_figPath())
- if cp.has_option('Chip Type', 'MD1_EINT_SRC_PIN'):
- flag = cp.get('Chip Type', 'MD1_EINT_SRC_PIN')
- if flag == '0':
- self.__bSrcPinEnable = False
- if(self.__bSrcPinEnable):
- #for option in cp.options('SRC_PIN'):
- #value = cp.get('SRC_PIN', option)
- #value = value[1:]
- #temp = value.split('=')
- #self.__srcPin[temp[0]] = temp[1]
- with open(ModuleObj.get_figPath()) as file:
- src_pin_expr = r"^.+\s*::\s*(\w+)\s*=\s*(\w+)\s*$"
- reg = re.compile(src_pin_expr)
- for line in dropwhile(lambda line: not line.lstrip().startswith("[SRC_PIN]"), file):
- match_obj = reg.match(line)
- if match_obj:
- self.__srcPin[match_obj.group(1)] = match_obj.group(2)
- else:
- self.__srcPin[''] = '-1'
- def read(self, node):
- nodes = node.childNodes
- try:
- for node in nodes:
- if node.nodeType == xml.dom.Node.ELEMENT_NODE:
- if cmp(node.nodeName, 'count') == 0:
- self.__count = node.childNodes[0].nodeValue
- continue
- varNode = node.getElementsByTagName('varName')
- detNode = node.getElementsByTagName('debounce_time')
- polNode = node.getElementsByTagName('polarity')
- senNode = node.getElementsByTagName('sensitive_level')
- deeNode = node.getElementsByTagName('debounce_en')
- dedNode = node.getElementsByTagName('dedicated_en')
- srcNode = node.getElementsByTagName('srcPin')
- sktNode = node.getElementsByTagName('socketType')
- data = Md1EintData()
- if len(varNode):
- data.set_varName(varNode[0].childNodes[0].nodeValue)
- if len(detNode):
- data.set_debounceTime(detNode[0].childNodes[0].nodeValue)
- if len(polNode):
- data.set_polarity(polNode[0].childNodes[0].nodeValue)
- if len(senNode):
- data.set_sensitiveLevel(senNode[0].childNodes[0].nodeValue)
- if len(deeNode):
- data.set_debounceEnable(deeNode[0].childNodes[0].nodeValue)
- if len(dedNode):
- data.set_dedicatedEn(dedNode[0].childNodes[0].nodeValue)
- if len(srcNode) and len(srcNode[0].childNodes):
- data.set_srcPin(srcNode[0].childNodes[0].nodeValue)
- if len(sktNode) and len(sktNode[0].childNodes):
- data.set_socketType(sktNode[0].childNodes[0].nodeValue)
- ModuleObj.set_data(self, node.nodeName, data)
- except:
- msg = 'read md1_eint content fail!'
- util.log(LogLevel.error, msg)
- return False
- return True
- def parse(self, node):
- self.get_cfgInfo()
- self.read(node)
- def gen_files(self):
- ModuleObj.gen_files(self)
- def fill_hFile(self):
- gen_str = ''
- gen_str += '''#define CUST_EINT_MD_LEVEL_SENSITIVE\t\t0\n'''
- gen_str += '''#define CUST_EINT_MD_EDGE_SENSITIVE\t\t1\n'''
- gen_str += '''\n'''
- if self.__bSrcPinEnable:
- for (key, value) in self.__srcPin.items():
- gen_str += '''#define %s\t\t%s\n''' %(key, value)
- gen_str += '''\n'''
- gen_str += '''#define CUST_EINT_POLARITY_LOW\t\t0\n'''
- gen_str += '''#define CUST_EINT_POLARITY_HIGH\t\t1\n'''
- gen_str += '''\n'''
- gen_str += '''#define CUST_EINT_LEVEL_SENSITIVE\t\t0\n'''
- gen_str += '''#define CUST_EINT_EDGE_SENSITIVE\t\t1\n'''
- gen_str += '''\n'''
- count = 0
- for key in sorted_key(ModuleObj.get_data(self).keys()):
- value = ModuleObj.get_data(self)[key]
- if cmp(value.get_varName(), 'NC') == 0:
- continue
- num = key[4:]
- count += 1
- gen_str += '''#define CUST_EINT_MD1_%s_NAME\t\t\t"%s"\n''' %(num, value.get_varName())
- gen_str += '''#define CUST_EINT_MD1_%s_NUM\t\t\t%s\n''' %(num, num)
- gen_str += '''#define CUST_EINT_MD1_%s_DEBOUNCE_CN\t\t%s\n''' %(num, value.get_debounceTime())
- gen_str += '''#define CUST_EINT_MD1_%s_POLARITY\t\tCUST_EINT_POLARITY_%s\n''' %(num, value.get_polarity().upper())
- gen_str += '''#define CUST_EINT_MD1_%s_SENSITIVE\t\tCUST_EINT_MD_%s_SENSITIVE\n''' %(num, value.get_sensitiveLevel().upper())
- gen_str += '''#define CUST_EINT_MD1_%s_DEBOUNCE_EN\t\tCUST_EINT_DEBOUNCE_%s\n''' %(num, value.get_debounceEnable().upper())
- gen_str += '''#define CUST_EINT_MD1_%s_DEDICATED_EN\t\t%s\n''' %(num, int(value.get_dedicatedEn()))
- if self.__bSrcPinEnable:
- gen_str += '''#define CUST_EINT_MD1_%s_SRCPIN\t\t\t%s\n''' %(num, value.get_srcPin())
- gen_str += '''\n'''
- gen_str += '''#define CUST_EINT_MD1_CNT\t\t\t%d\n''' %(count)
- return gen_str
- def fill_dtsiFile(self):
- gen_str = ''
- gen_str += '''&eintc {\n'''
- for key in sorted_key(ModuleObj.get_data(self).keys()):
- value = ModuleObj.get_data(self)[key]
- if cmp(value.get_varName(), 'NC') == 0:
- continue
- num = key[4:]
- gen_str += '''\t%s@%s {\n''' %(value.get_varName(), num)
- gen_str += '''\t\tcompatible = \"mediatek,%s-eint\";\n''' %(value.get_varName())
- type = 1
- polarity = value.get_polarity()
- sensitive = value.get_sensitiveLevel()
- if cmp(polarity, 'High') == 0 and cmp(sensitive, 'Edge') == 0:
- type = 1
- elif cmp(polarity, 'Low') == 0 and cmp(sensitive, 'Edge') == 0:
- type = 2
- elif cmp(polarity, 'High') == 0 and cmp(sensitive, 'Level') == 0:
- type = 4
- elif cmp(polarity, 'Low') == 0 and cmp(sensitive, 'Level') == 0:
- type = 8
- gen_str += '''\t\tinterrupts = <%s %d>;\n''' %(num, type)
- gen_str += '''\t\tdebounce = <%s %d>;\n''' %(num, (string.atoi(value.get_debounceTime()))*1000)
- gen_str += '''\t\tdedicated = <%s %d>;\n''' %(num, int(value.get_dedicatedEn()))
- if self.__bSrcPinEnable:
- gen_str += '''\t\tsrc_pin = <%s %s>;\n''' %(num, self.__srcPin[value.get_srcPin()])
- else:
- gen_str += '''\t\tsrc_pin = <%s %s>;\n''' %(num, -1)
- gen_str += '''\t\tsockettype = <%s %s>;\n''' %(num, value.get_socketType())
- gen_str += '''\t\tstatus = \"okay\";\n'''
- gen_str += '''\t};\n'''
- gen_str += '''\n'''
- gen_str += '''};\n'''
- return gen_str
- def get_srcPin(self):
- return self.__srcPin
- def get_srcPinEnable(self):
- return self.__bSrcPinEnable
- class Md1EintObj_MT6739(Md1EintObj):
- def __init__(self):
- Md1EintObj.__init__(self)
- def fill_dtsiFile(self):
- gen_str = ''
- for key in sorted_key(ModuleObj.get_data(self).keys()):
- value = ModuleObj.get_data(self)[key]
- if cmp(value.get_varName(), 'NC') == 0:
- continue
- num = key[4:]
- gen_str += '''&%s {\n''' % (value.get_varName().lower())
- gen_str += '''\tcompatible = \"mediatek,%s-eint\";\n''' % (value.get_varName().lower())
- type = 1
- polarity = value.get_polarity()
- sensitive = value.get_sensitiveLevel()
- if cmp(polarity, 'High') == 0 and cmp(sensitive, 'Edge') == 0:
- type = 1
- elif cmp(polarity, 'Low') == 0 and cmp(sensitive, 'Edge') == 0:
- type = 2
- elif cmp(polarity, 'High') == 0 and cmp(sensitive, 'Level') == 0:
- type = 4
- elif cmp(polarity, 'Low') == 0 and cmp(sensitive, 'Level') == 0:
- type = 8
- gen_str += '''\tinterrupts = <%s %d>;\n''' % (num, type)
- gen_str += '''\tdebounce = <%s %d>;\n''' % (num, (string.atoi(value.get_debounceTime())) * 1000)
- gen_str += '''\tdedicated = <%s %d>;\n''' % (num, int(value.get_dedicatedEn()))
- if self.get_srcPinEnable():
- gen_str += '''\tsrc_pin = <%s %s>;\n''' % (num, self.get_srcPin()[value.get_srcPin()])
- else:
- gen_str += '''\tsrc_pin = <%s %s>;\n''' % (num, -1)
- gen_str += '''\tsockettype = <%s %s>;\n''' % (num, value.get_socketType())
- gen_str += '''\tstatus = \"okay\";\n'''
- gen_str += '''};\n'''
- gen_str += '''\n'''
- return gen_str
|