From da9a6ab4a761b6a5f643b1f5903c89ef4b12e742 Mon Sep 17 00:00:00 2001 From: Alexey Min Date: Sat, 2 May 2020 06:37:16 +0300 Subject: [PATCH] linux-nokia-frt: python3 compatibility (MR 1202) --- device/testing/linux-nokia-frt/APKBUILD | 10 +- .../testing/linux-nokia-frt/py3-compat.patch | 585 ++++++++++++++++++ 2 files changed, 591 insertions(+), 4 deletions(-) create mode 100644 device/testing/linux-nokia-frt/py3-compat.patch diff --git a/device/testing/linux-nokia-frt/APKBUILD b/device/testing/linux-nokia-frt/APKBUILD index dc2bc0ff8..37327b7ed 100644 --- a/device/testing/linux-nokia-frt/APKBUILD +++ b/device/testing/linux-nokia-frt/APKBUILD @@ -3,7 +3,7 @@ # Maintainer: Piotr Halama pkgname=linux-nokia-frt pkgver=3.18.79 -pkgrel=1 +pkgrel=2 pkgdesc="Nokia 1 kernel fork" arch="armv7" _carch="arm" @@ -11,7 +11,7 @@ _flavor="nokia-frt" url="https://www.nokia.com/phones/en_int/opensource/" license="GPL-2.0-only" options="!strip !check !tracedeps pmb:cross-native" -makedepends="perl sed installkernel bash gmp-dev bc linux-headers elfutils-dev devicepkg-dev python" +makedepends="perl sed installkernel bash gmp-dev bc linux-headers elfutils-dev devicepkg-dev python3" # Source _repository="android_kernel_nokia_1" @@ -25,8 +25,9 @@ source=" 01_makefile_path.patch 02_drvgen_mk.patch 03_vdsomunge_upstream.patch + py3-compat.patch " -#gcc7-give-up-on-ilog2-const-optimizations.patch + builddir="$srcdir/$_repository-$_commit" prepare() { @@ -57,4 +58,5 @@ sha512sums="676be1813c0886c509591a4940b9fdbd91243aaf84a8efebd7229f681e84211d86cc 1d1a99de49b29069eb1711ad884e3f0db0956d8eeb81bdb332e6aa13fb7f5cdd48cd75791cebc08b1aa0644cdd643d7632791a272333547a6ffe68a75295e7a8 00_symlinks.patch ef8b9da80ca67424a02acfbf99924e3ea06574c83c6a737031f6ac41b718742ef0bd66b968b14118cac021067e29184e2199f238ace2a43dc2176d9cce796bc5 01_makefile_path.patch aaf7e208f307db3126202f3f3410d4f8a74b450ef719717a064c817258cb428a150a798494f57e43f9e1f747ad83527e565f8d81c3c746d1fb0b4e42e6e30d50 02_drvgen_mk.patch -19a6c3445bfd8057e4fabe1709f3d2344f3a99fef49b44636c07a18ba8791fab1bcff77f93aadff887946ae6f83c9d86e1c28f9b88d03c6ba156704d430b4470 03_vdsomunge_upstream.patch" +19a6c3445bfd8057e4fabe1709f3d2344f3a99fef49b44636c07a18ba8791fab1bcff77f93aadff887946ae6f83c9d86e1c28f9b88d03c6ba156704d430b4470 03_vdsomunge_upstream.patch +0729fc816ea28693e7cbf4b71fc4117b124907a6a5327589e9ec2d222105c0bd0cba2320461c86b7322fc708973122bb66ca745e32cc70791225c5bbb872f999 py3-compat.patch" diff --git a/device/testing/linux-nokia-frt/py3-compat.patch b/device/testing/linux-nokia-frt/py3-compat.patch new file mode 100644 index 000000000..68bc3e65e --- /dev/null +++ b/device/testing/linux-nokia-frt/py3-compat.patch @@ -0,0 +1,585 @@ +commit a4cfff73c0f9a90e2d820720b07abb47011829f2 +Author: Alexey Min +Date: Sat May 2 06:11:41 2020 +0300 + + port driver generator scripts to py3 + +diff --git a/scripts/drvgen/drvgen.mk b/scripts/drvgen/drvgen.mk +index 17f5f7b7273..617c3eb632c 100644 +--- a/scripts/drvgen/drvgen.mk ++++ b/scripts/drvgen/drvgen.mk +@@ -91,7 +91,7 @@ $(DTB_OVERLAY_IMAGE_TAGERT) : PRIVATE_MKIMAGE_CFG:=$(srctree)/scripts/odmdtbo.cf + $(DTB_OVERLAY_IMAGE_TAGERT) : $(PRIVATE_MULTIPLE_DTB_OVERLAY_OBJ) dtbs $(PRIVATE_MKIMAGE_TOOL) $(PRIVATE_MKIMAGE_CFG) $(PRIVATE_MULTIPLE_DTB_OVERLAY_HDR) + @echo Singing the generated overlay dtbo. + cat $(PRIVATE_DTB_OVERLAY_OBJ) > $(PRIVATE_MULTIPLE_DTB_OVERLAY_OBJ) || (rm -f $(PRIVATE_MULTIPLE_DTB_OVERLAY_OBJ); false) +- python $(PRIVATE_MULTIPLE_DTB_OVERLAY_HDR) $(PRIVATE_MULTIPLE_DTB_OVERLAY_OBJ) $(PRIVATE_MULTIPLE_DTB_OVERLAY_IMG) ++ python3 $(PRIVATE_MULTIPLE_DTB_OVERLAY_HDR) $(PRIVATE_MULTIPLE_DTB_OVERLAY_OBJ) $(PRIVATE_MULTIPLE_DTB_OVERLAY_IMG) + # Not needed, requires glibc + + .PHONY: odmdtboimage dtbs +diff --git a/scripts/multiple_dtbo.py b/scripts/multiple_dtbo.py +index 1d8e872443e..6bc0d7a14de 100644 +--- a/scripts/multiple_dtbo.py ++++ b/scripts/multiple_dtbo.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # -*- coding: utf-8 -*- + + # Copyright (C) 2016 MediaTek Inc. +@@ -52,12 +52,15 @@ def write_header(output_file, input_file, dtb_list): + head[8 + i] = struct.pack('I', offset) + i = i + 1 + +- with open(output_file, 'w') as fo: ++ with open(output_file, 'wb') as fo: + for item in head: +- fo.write("%s" % item) +- with open(input_file, 'r') as fi: +- for line in fi.readlines(): +- fo.write(line) ++ #fo.write("%s" % item) ++ fo.write(item) ++ with open(input_file, 'rb') as fi: ++ #for line in fi.readlines(): ++ # fo.write(line) ++ rawbytes = fi.read() ++ fo.write(rawbytes) + fi.close + fo.close + +diff --git a/tools/dct/DrvGen.py b/tools/dct/DrvGen.py +index ebc280c69c0..7c771580601 100755 +--- a/tools/dct/DrvGen.py ++++ b/tools/dct/DrvGen.py +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/python3 + # -*- coding: utf-8 -*- + + # Copyright (C) 2016 MediaTek Inc. +@@ -35,9 +35,10 @@ from obj.ChipObj import MT6750S + + from utility.util import LogLevel + from utility.util import log ++from utility.util import cmp + + def usage(): +- print ''' ++ print(''' + usage: DrvGen [dws_path] [file_path] [log_path] [paras]... + + options and arguments: +@@ -46,7 +47,7 @@ dws_path : dws file path + file_path : where you want to put generated files + log_path : where to store the log files + paras : parameter for generate wanted file +-''' ++''') + + def is_oldDws(path, gen_spec): + if not os.path.exists(path): +@@ -55,7 +56,7 @@ def is_oldDws(path, gen_spec): + + try: + root = xml.dom.minidom.parse(dws_path) +- except Exception, e: ++ except Exception as e: + log(LogLevel.warn, '%s is not xml format, try to use old DCT!' %(dws_path)) + if len(gen_spec) == 0: + log(LogLevel.warn, 'Please use old DCT UI to gen all files!') +diff --git a/tools/dct/obj/ChipObj.py b/tools/dct/obj/ChipObj.py +index 2592931ba8f..c5b18c2b0d4 100755 +--- a/tools/dct/obj/ChipObj.py ++++ b/tools/dct/obj/ChipObj.py +@@ -16,26 +16,27 @@ import os, sys + import collections + import xml.dom.minidom + +-from GpioObj import GpioObj +-from GpioObj import GpioObj_whitney +-from GpioObj import GpioObj_MT6759 +-from EintObj import EintObj +-from EintObj import EintObj_MT6750S +-from AdcObj import AdcObj +-from ClkObj import ClkObj +-from ClkObj import ClkObj_Everest +-from ClkObj import ClkObj_Olympus +-from ClkObj import ClkObj_Rushmore +-from I2cObj import I2cObj +-from I2cObj import I2cObj_MT6759 +-from PmicObj import PmicObj +-from Md1EintObj import Md1EintObj +-from PowerObj import PowerObj +-from KpdObj import KpdObj +-from ModuleObj import ModuleObj ++from .GpioObj import GpioObj ++from .GpioObj import GpioObj_whitney ++from .GpioObj import GpioObj_MT6759 ++from .EintObj import EintObj ++from .EintObj import EintObj_MT6750S ++from .AdcObj import AdcObj ++from .ClkObj import ClkObj ++from .ClkObj import ClkObj_Everest ++from .ClkObj import ClkObj_Olympus ++from .ClkObj import ClkObj_Rushmore ++from .I2cObj import I2cObj ++from .I2cObj import I2cObj_MT6759 ++from .PmicObj import PmicObj ++from .Md1EintObj import Md1EintObj ++from .PowerObj import PowerObj ++from .KpdObj import KpdObj ++from .ModuleObj import ModuleObj + + from utility.util import log + from utility.util import LogLevel ++from utility.util import cmp + + para_map = {'adc':['adc_h', 'adc_dtsi'],\ + 'clk':['clk_buf_h', 'clk_buf_dtsi'],\ +diff --git a/tools/dct/obj/ClkObj.py b/tools/dct/obj/ClkObj.py +index d13a81bb6aa..41913fd4a46 100755 +--- a/tools/dct/obj/ClkObj.py ++++ b/tools/dct/obj/ClkObj.py +@@ -15,15 +15,16 @@ + import os + import re + import string +-import ConfigParser ++import configparser + + import xml.dom.minidom + +-from ModuleObj import ModuleObj ++from .ModuleObj import ModuleObj + from data.ClkData import ClkData + from utility.util import log + from utility.util import LogLevel + from utility.util import sorted_key ++from utility.util import cmp + + DEFAULT_AUTOK = 'AutoK' + class ClkObj(ModuleObj): +@@ -61,17 +62,17 @@ class ClkObj(ModuleObj): + return True + + def get_cfgInfo(self): +- cp = ConfigParser.ConfigParser(allow_no_value=True) ++ cp = configparser.ConfigParser(allow_no_value=True, strict=False) + cp.read(ModuleObj.get_figPath()) + +- count = string.atoi(cp.get('CLK_BUF', 'CLK_BUF_COUNT')) ++ count = int(cp.get('CLK_BUF', 'CLK_BUF_COUNT')) + self.__count = count + + ops = cp.options('CLK_BUF') + for op in ops: + if op == 'clk_buf_count': +- self.__count = string.atoi(cp.get('CLK_BUF', op)) +- ClkData._count = string.atoi(cp.get('CLK_BUF', op)) ++ self.__count = int(cp.get('CLK_BUF', op)) ++ ClkData._count = int(cp.get('CLK_BUF', op)) + continue + + value = cp.get('CLK_BUF', op) +@@ -79,8 +80,8 @@ class ClkObj(ModuleObj): + + data = ClkData() + data.set_curList(var_list[2:]) +- data.set_defVarName(string.atoi(var_list[0])) +- data.set_defCurrent(string.atoi(var_list[1])) ++ data.set_defVarName(int(var_list[0])) ++ data.set_defCurrent(int(var_list[1])) + + key = op[16:].upper() + ModuleObj.set_data(self, key, data) +@@ -358,10 +359,10 @@ class ClkObj_Rushmore(ClkObj): + ClkObj.parse(self, node) + + def get_cfgInfo(self): +- cp = ConfigParser.ConfigParser(allow_no_value=True) ++ cp = configparser.ConfigParser(allow_no_value=True, strict=False) + cp.read(ModuleObj.get_figPath()) + +- count = string.atoi(cp.get('CLK_BUF', 'CLK_BUF_COUNT')) ++ count = int(cp.get('CLK_BUF', 'CLK_BUF_COUNT')) + self.__count = count + + def read(self, node): +diff --git a/tools/dct/obj/EintObj.py b/tools/dct/obj/EintObj.py +index 5f80678e35a..7a8ccd6d6a8 100755 +--- a/tools/dct/obj/EintObj.py ++++ b/tools/dct/obj/EintObj.py +@@ -16,7 +16,7 @@ import re + import os + import string + +-import ConfigParser ++import configparser + import xml.dom.minidom + + from data.EintData import EintData +@@ -24,6 +24,7 @@ from data.GpioData import GpioData + from utility.util import log + from utility.util import LogLevel + from utility.util import compare ++from utility.util import cmp + + from obj.ModuleObj import ModuleObj + from obj.GpioObj import GpioObj +@@ -84,7 +85,7 @@ class EintObj(ModuleObj): + ModuleObj.gen_spec(self, para) + + def get_cfgInfo(self): +- cp = ConfigParser.ConfigParser(allow_no_value=True) ++ cp = configparser.ConfigParser(allow_no_value=True, strict=False) + cp.read(ModuleObj.get_figPath()) + + ops = cp.options('GPIO') +diff --git a/tools/dct/obj/GpioObj.py b/tools/dct/obj/GpioObj.py +index 94f1f83a1ab..fc48ca20646 100755 +--- a/tools/dct/obj/GpioObj.py ++++ b/tools/dct/obj/GpioObj.py +@@ -16,18 +16,19 @@ import re + import os + import sys + import string +-import ConfigParser ++import configparser + import xml.dom.minidom + + + from data.GpioData import GpioData + from data.EintData import EintData +-from ModuleObj import ModuleObj +-import ChipObj ++from .ModuleObj import ModuleObj ++import obj.ChipObj + from utility.util import compare + from utility.util import sorted_key + from utility.util import log + from utility.util import LogLevel ++from utility.util import cmp + + class GpioObj(ModuleObj): + def __init__(self): +@@ -40,7 +41,7 @@ class GpioObj(ModuleObj): + self.__drvCur = False + + def get_cfgInfo(self): +- cp = ConfigParser.ConfigParser(allow_no_value=True) ++ cp = configparser.ConfigParser(allow_no_value=True, strict=False) + cp.read(ModuleObj.get_cmpPath()) + + # get GPIO_FREQ section +@@ -70,7 +71,7 @@ class GpioObj(ModuleObj): + GpioData._modeMap[op] = temp + + data = GpioData() +- data.set_smtNum(string.atoi(list[len(list)-1])) ++ data.set_smtNum(int(list[len(list)-1])) + ModuleObj.set_data(self, op.lower(), data) + + def read(self, node): +@@ -78,7 +79,7 @@ class GpioObj(ModuleObj): + for node in nodes: + if node.nodeType == xml.dom.Node.ELEMENT_NODE: + if cmp(node.nodeName, 'count') == 0: +- GpioData._count = string.atoi(node.childNodes[0].nodeValue) ++ GpioData._count = int(node.childNodes[0].nodeValue) + continue + + eintNode = node.getElementsByTagName('eint_mode') +@@ -97,7 +98,7 @@ class GpioObj(ModuleObj): + iesNode = node.getElementsByTagName('ies') + drvCurNode = node.getElementsByTagName('drv_cur') + +- num = string.atoi(node.nodeName[4:]) ++ num = int(node.nodeName[4:]) + if num >= len(ModuleObj.get_data(self)): + break + data = ModuleObj.get_data(self)[node.nodeName] +@@ -109,7 +110,7 @@ class GpioObj(ModuleObj): + data.set_eintMode(flag) + + if len(defmNode): +- data.set_defMode(string.atoi(defmNode[0].childNodes[0].nodeValue)) ++ data.set_defMode(int(defmNode[0].childNodes[0].nodeValue)) + + if len(modsNode): + str = modsNode[0].childNodes[0].nodeValue +diff --git a/tools/dct/obj/I2cObj.py b/tools/dct/obj/I2cObj.py +index 289c57ca98b..a7f643751de 100755 +--- a/tools/dct/obj/I2cObj.py ++++ b/tools/dct/obj/I2cObj.py +@@ -15,14 +15,15 @@ + import re + import string + import xml.dom.minidom +-import ConfigParser ++import configparser + +-from ModuleObj import ModuleObj ++from .ModuleObj import ModuleObj + #from utility import util + from utility.util import sorted_key ++from utility.util import cmp + from data.I2cData import I2cData + from data.I2cData import BusData +-import ChipObj ++import obj.ChipObj + + class I2cObj(ModuleObj): + _busList = [] +@@ -33,11 +34,11 @@ class I2cObj(ModuleObj): + #self.__bBusEnable = True + + def get_cfgInfo(self): +- cp = ConfigParser.ConfigParser(allow_no_value=True) ++ cp = configparser.ConfigParser(allow_no_value=True, strict=False) + cp.read(ModuleObj.get_figPath()) + +- I2cData._i2c_count = string.atoi(cp.get('I2C', 'I2C_COUNT')) +- I2cData._channel_count = string.atoi(cp.get('I2C', 'CHANNEL_COUNT')) ++ I2cData._i2c_count = int(cp.get('I2C', 'I2C_COUNT')) ++ I2cData._channel_count = int(cp.get('I2C', 'CHANNEL_COUNT')) + + if cp.has_option('Chip Type', 'I2C_BUS'): + flag = cp.get('Chip Type', 'I2C_BUS') +@@ -128,7 +129,7 @@ class I2cObj(ModuleObj): + + + if self._bBusEnable: +- gen_str += '''\tclock-frequency = <%d>;\n''' %(string.atoi(self._busList[i].get_speed()) * 1000) ++ gen_str += '''\tclock-frequency = <%d>;\n''' %(int(self._busList[i].get_speed()) * 1000) + temp_str = '' + + if cmp(self._busList[i].get_enable(), 'false') == 0: +@@ -175,7 +176,7 @@ class I2cObj_MT6759(I2cObj): + + + if self._bBusEnable: +- gen_str += '''\tclock-frequency = <%d>;\n''' %(string.atoi(self._busList[i].get_speed()) * 1000) ++ gen_str += '''\tclock-frequency = <%d>;\n''' %(int(self._busList[i].get_speed()) * 1000) + temp_str = '' + + if cmp(self._busList[i].get_enable(), 'false') == 0: +diff --git a/tools/dct/obj/KpdObj.py b/tools/dct/obj/KpdObj.py +index 6dae46f2572..0897e51cc7a 100755 +--- a/tools/dct/obj/KpdObj.py ++++ b/tools/dct/obj/KpdObj.py +@@ -14,12 +14,13 @@ + + import re + import string +-import ConfigParser ++import configparser + import xml.dom.minidom + +-from ModuleObj import ModuleObj ++from .ModuleObj import ModuleObj + from utility.util import LogLevel + from utility.util import log ++from utility.util import cmp + from data.KpdData import KpdData + + class KpdObj(ModuleObj): +@@ -29,20 +30,20 @@ class KpdObj(ModuleObj): + + + def get_cfgInfo(self): +- cp = ConfigParser.ConfigParser(allow_no_value=True) ++ cp = configparser.ConfigParser(allow_no_value=True, strict=False) + cp.read(ModuleObj.get_cmpPath()) + + ops = cp.options('Key_definition') + for op in ops: +- KpdData._keyValueMap[op.upper()] = string.atoi(cp.get('Key_definition', op)) ++ KpdData._keyValueMap[op.upper()] = int(cp.get('Key_definition', op)) + + KpdData._keyValueMap['NC'] = 0 + + cp.read(ModuleObj.get_figPath()) + if cp.has_option('KEYPAD_EXTEND_TYPE', 'KEY_ROW'): +- KpdData.set_row_ext(string.atoi(cp.get('KEYPAD_EXTEND_TYPE', 'KEY_ROW'))) ++ KpdData.set_row_ext(int(cp.get('KEYPAD_EXTEND_TYPE', 'KEY_ROW'))) + if cp.has_option('KEYPAD_EXTEND_TYPE', 'KEY_COLUMN'): +- KpdData.set_col_ext(string.atoi(cp.get('KEYPAD_EXTEND_TYPE', 'KEY_COLUMN'))) ++ KpdData.set_col_ext(int(cp.get('KEYPAD_EXTEND_TYPE', 'KEY_COLUMN'))) + + return True + +@@ -51,11 +52,11 @@ class KpdObj(ModuleObj): + for node in nodes: + if node.nodeType == xml.dom.Node.ELEMENT_NODE: + if node.nodeName == 'row': +- row = string.atoi(node.childNodes[0].nodeValue) ++ row = int(node.childNodes[0].nodeValue) + KpdData.set_row(row) + + if node.nodeName == 'column': +- col = string.atoi(node.childNodes[0].nodeValue) ++ col = int(node.childNodes[0].nodeValue) + KpdData.set_col(col) + + if node.nodeName == 'keyMatrix': +@@ -94,7 +95,7 @@ class KpdObj(ModuleObj): + KpdData._modeKeys['FACTORY'] = keys[2] + + if node.nodeName == 'pwrKeyEint_gpioNum': +- num = string.atoi(node.childNodes[0].nodeValue) ++ num = int(node.childNodes[0].nodeValue) + KpdData.set_gpioNum(num) + + if node.nodeName == 'pwrKeyUtility': +@@ -127,7 +128,7 @@ class KpdObj(ModuleObj): + KpdData.set_gpioDinHigh(flag) + + if node.nodeName == 'pressPeriod': +- time = string.atoi(node.childNodes[0].nodeValue) ++ time = int(node.childNodes[0].nodeValue) + KpdData.set_pressTime(time) + + if node.nodeName == 'keyType': +diff --git a/tools/dct/obj/Md1EintObj.py b/tools/dct/obj/Md1EintObj.py +index 7b4ef25c8c6..450abab9c87 100755 +--- a/tools/dct/obj/Md1EintObj.py ++++ b/tools/dct/obj/Md1EintObj.py +@@ -12,13 +12,14 @@ + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + # See http://www.gnu.org/licenses/gpl-2.0.html for more details. + +-import ConfigParser ++import configparser + import string + import xml.dom.minidom + + from utility import util + from utility.util import sorted_key +-from ModuleObj import ModuleObj ++from utility.util import cmp ++from .ModuleObj import ModuleObj + from data.Md1EintData import Md1EintData + from utility.util import LogLevel + +@@ -30,7 +31,7 @@ class Md1EintObj(ModuleObj): + + def get_cfgInfo(self): + # ConfigParser accept ":" and "=", so SRC_PIN will be treated specially +- cp = ConfigParser.ConfigParser(allow_no_value=True) ++ cp = configparser.ConfigParser(allow_no_value=True, strict=False) + cp.read(ModuleObj.get_figPath()) + + if cp.has_option('Chip Type', 'MD1_EINT_SRC_PIN'): +@@ -166,7 +167,7 @@ class Md1EintObj(ModuleObj): + 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\tdebounce = <%s %d>;\n''' %(num, (int(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()]) +diff --git a/tools/dct/obj/PmicObj.py b/tools/dct/obj/PmicObj.py +index 0bafe8f4d4a..83c2f28bc7d 100755 +--- a/tools/dct/obj/PmicObj.py ++++ b/tools/dct/obj/PmicObj.py +@@ -14,13 +14,14 @@ + + import sys, os + import re +-import ConfigParser ++import configparser + import xml.dom.minidom + +-from ModuleObj import ModuleObj ++from .ModuleObj import ModuleObj + from data.PmicData import PmicData + + from utility.util import log ++from utility.util import cmp + from utility.util import LogLevel + from utility.util import compare + from utility.util import sorted_key +@@ -39,7 +40,7 @@ class PmicObj(ModuleObj): + + + def get_cfgInfo(self): +- cp = ConfigParser.ConfigParser(allow_no_value=True) ++ cp = configparser.ConfigParser(allow_no_value=True, strict=False) + cp.read(ModuleObj.get_cmpPath()) + + PmicData._var_list = cp.options('APPLICATION') +diff --git a/tools/dct/obj/PowerObj.py b/tools/dct/obj/PowerObj.py +index 6cff9bf5d8f..885bf173b07 100755 +--- a/tools/dct/obj/PowerObj.py ++++ b/tools/dct/obj/PowerObj.py +@@ -15,15 +15,16 @@ + import sys,os + import re + import string +-import ConfigParser ++import configparser + import xml.dom.minidom + +-import ChipObj ++import obj.ChipObj + from data.PowerData import PowerData + from utility.util import log ++from utility.util import cmp + from utility.util import LogLevel + from utility.util import sorted_key +-from ModuleObj import ModuleObj ++from .ModuleObj import ModuleObj + + class PowerObj(ModuleObj): + def __init__(self): +@@ -31,7 +32,7 @@ class PowerObj(ModuleObj): + self.__list = {} + + def getCfgInfo(self): +- cp = ConfigParser.ConfigParser(allow_no_value=True) ++ cp = configparser.ConfigParser(allow_no_value=True, strict=False) + cp.read(ModuleObj.get_figPath()) + + self.__list = cp.options('POWER') +@@ -75,7 +76,7 @@ class PowerObj(ModuleObj): + value = ModuleObj.get_data(self)[key] + if value.get_varName() == '': + continue +- idx = string.atoi(key[5:]) ++ idx = int(key[5:]) + name = self.__list[idx] + gen_str += '''#define GPIO_%s\t\tGPIO_%s\n''' %(name.upper(), value.get_varName()) + +diff --git a/tools/dct/utility/util.py b/tools/dct/utility/util.py +index 8c0b16e17fb..619771e45a9 100755 +--- a/tools/dct/utility/util.py ++++ b/tools/dct/utility/util.py +@@ -27,11 +27,11 @@ class LogLevel: + + def log(level, msg): + if level == LogLevel.info: +- print LEVEL_INFO + msg ++ print(LEVEL_INFO + msg) + elif level == LogLevel.warn: +- print LEVEL_WARN + msg ++ print(LEVEL_WARN + msg) + elif level == LogLevel.error: +- print LEVEL_ERROR + msg ++ print(LEVEL_ERROR + msg) + + def compare(value): + lst = re.findall(r'\d+', value) +@@ -44,4 +44,11 @@ def compare(value): + def sorted_key(lst): + return sorted(lst, key=compare) + ++def cmp(a, b): ++ if a == b: ++ return 0 ++ if a < b: ++ return -1 ++ if a > b: ++ return 1 +