From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E0281C55179 for ; Tue, 27 Oct 2020 20:13:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 97D502225E for ; Tue, 27 Oct 2020 20:13:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1603829593; bh=sWpHPHZWX+iZ/sr5UlxKJziKuk4xl2oizpTAh1MVWto=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=AVGNnOAW2LWa55udRDS1z6nP8MBgbQ+Dp7ALO1bHRQ+NgAz8MLEaVXWcfDD6uVdoF 4KsLvh+s476ifEHAd+twArnCM3axDID5ZcDONC/nLNPiPNB40JeMiSjn2UaJwrYd4V I8VXYpC7LMjMmZmmmhvPRaX7VmVup/ghDYzF7jWs= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1830981AbgJ0UNM convert rfc822-to-8bit (ORCPT ); Tue, 27 Oct 2020 16:13:12 -0400 Received: from mail-ej1-f67.google.com ([209.85.218.67]:44044 "EHLO mail-ej1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389105AbgJ0UNL (ORCPT ); Tue, 27 Oct 2020 16:13:11 -0400 Received: by mail-ej1-f67.google.com with SMTP id j24so438641ejc.11; Tue, 27 Oct 2020 13:13:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=HqJmJCDPovYzugndA/OMAMO1DYv3EvZsetrZulAFRJo=; b=XNjJs5AzOegBZJJBjJem3T87m+EQEguZU2+rGU4XU32A58MrCbfojG6+pZlGoftB9Y Si7nNr/1OUqNNYuScUqq7xTdHHWKmBqu/Qji9Bk77g+nrP/oQpBulc//7na99M0HS17U 20jAlpAMKPLZAVHzyl+t/wMF/sbrNTWWj9nKhSgJdUqmgodB03umbiCBtnZrolvTESyL UCTQw4j9jwkVMZOirv7CPa9Dhj7sbaaMk0U3pqbdVHmTJT/gSR9hJNBWRgtbYSxuvlIG 8K2fLAA6HATpUQWXOoOpLWQwkODWPxuL8m1AgDalRMChctkRBGZ0NKeDU0aHpWPAoN10 bRbQ== X-Gm-Message-State: AOAM532oc4ZYu1/JwYSYwue1fWHYhp+e+VbvDRlvKV2+PCv79lOA6PoK CunJso4YvLCqQ9fc79kZI4Sg0ZlIrZTejcXB X-Google-Smtp-Source: ABdhPJyxK5jb4+SSk0aVsGdjabxNWjpMoCztjBqVDZCFX5oikJ0sRp4orCdpmh6hLK6tm2a1tCG9/Q== X-Received: by 2002:a17:906:1411:: with SMTP id p17mr4377404ejc.102.1603829587542; Tue, 27 Oct 2020 13:13:07 -0700 (PDT) Received: from kozik-lap ([194.230.155.184]) by smtp.googlemail.com with ESMTPSA id u24sm1548170edo.92.2020.10.27.13.13.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Oct 2020 13:13:06 -0700 (PDT) Date: Tue, 27 Oct 2020 21:13:04 +0100 From: Krzysztof Kozlowski To: Gene Chen Cc: sre@kernel.org, Matthias Brugger , Rob Herring , linux-pm@vger.kernel.org, devicetree , linux-arm Mailing List , "moderated list:ARM/Mediatek SoC support" , Linux Kernel Mailing List , Gene Chen , cy_huang@richtek.com, shufan_lee@richtek.com Subject: Re: [PATCH 2/2] power: supply: mt6360_charger: add MT6360 charger support Message-ID: <20201027201304.GA142632@kozik-lap> References: <1600859910-15855-1-git-send-email-gene.chen.richtek@gmail.com> <1600859910-15855-2-git-send-email-gene.chen.richtek@gmail.com> <20201016155227.GB9890@kozik-lap> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8BIT In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Oct 26, 2020 at 02:45:12PM +0800, Gene Chen wrote: > Krzysztof Kozlowski 於 2020年10月16日 週五 下午11:52寫道: > > > No, I will remove it. > > > > + irq = platform_get_irq_byname(pdev, irq_desc->name); > > > > Interrupts were not described in the bindings. > > > > I add resource when MFD driver add sub-device. Should I add something > in dt-binding? I think I missed the part that you are taking here interrupts from parent MFD device. Bindings are fine then. > > ret = devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_AUTO, > mt6360_devs, > ARRAY_SIZE(mt6360_devs), NULL, 0, > regmap_irq_get_domain(ddata->irq_data)); > > static const struct resource mt6360_chg_resources[] = { > DEFINE_RES_IRQ_NAMED(MT6360_CHG_TREG_EVT, "chg_treg_evt"), > DEFINE_RES_IRQ_NAMED(MT6360_PWR_RDY_EVT, "pwr_rdy_evt"), > DEFINE_RES_IRQ_NAMED(MT6360_CHG_BATSYSUV_EVT, > "chg_batsysuv_evt"), > DEFINE_RES_IRQ_NAMED(MT6360_CHG_VSYSUV_EVT, "chg_vsysuv_evt"), > DEFINE_RES_IRQ_NAMED(MT6360_CHG_VSYSOV_EVT, "chg_vsysov_evt"), > DEFINE_RES_IRQ_NAMED(MT6360_CHG_VBATOV_EVT, "chg_vbatov_evt"), > DEFINE_RES_IRQ_NAMED(MT6360_CHG_VBUSOV_EVT, "chg_vbusov_evt"), > DEFINE_RES_IRQ_NAMED(MT6360_CHG_AICCMEASL, "chg_aiccmeasl"), > DEFINE_RES_IRQ_NAMED(MT6360_WDTMRI, "wdtmri"), > DEFINE_RES_IRQ_NAMED(MT6360_CHG_RECHGI, "chg_rechgi"), > DEFINE_RES_IRQ_NAMED(MT6360_CHG_TERMI, "chg_termi"), > DEFINE_RES_IRQ_NAMED(MT6360_CHG_IEOCI, "chg_ieoci"), > DEFINE_RES_IRQ_NAMED(MT6360_PUMPX_DONEI, "pumpx_donei"), > DEFINE_RES_IRQ_NAMED(MT6360_ATTACH_I, "attach_i"), > DEFINE_RES_IRQ_NAMED(MT6360_CHRDET_EXT_EVT, "chrdet_ext_evt"), > > > > + if (irq < 0) > > > + continue; > > > + ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, > > > + irq_desc->irq_handler, > > > + IRQF_TRIGGER_FALLING, > > > + irq_desc->name, > > > + platform_get_drvdata(pdev)); > > > > Why you use handler thread per each interrupt? This should be rather one > > handler. Especially that most of your handlers do nothing. > > > > I will remove serveral irqs which is do nothing, and only keep > chrdet_ext for power ready and attachi for bc12 done. > I add serveral resources in MFD device. > Do you mean I use IRQF_SHARED to reduce irq? I meant to use on thread_fn for most of them. I think, if you were using regmap_irq_chip and virtual IRQ here (see regmap_irq_get_virq), you could entirely skip the non-important interrupts. Just ignore them. Should be less code. > > > > + if (ret < 0) { > > > + dev_err(&pdev->dev, > > > + "request %s irq fail\n", irq_desc->name); > > > + return ret; > > > + } > > > + } > > > + return 0; > > > +} > > > + > > > +struct mt6360_field_info { > > > + struct device_attribute dev_attr; > > > + u8 reg; > > > + u8 mask; > > > + u8 shft; > > > +}; > > > + > > > +static ssize_t mt6360_sysfs_show(struct device *dev, > > > + struct device_attribute *attr, char *buf); > > > +static ssize_t mt6360_sysfs_store(struct device *dev, > > > + struct device_attribute *attr, const char *buf, size_t count); > > > + > > > +#define MT6360_FIELD_RW(_name, _reg, _nbit) \ > > > +{ \ > > > + .dev_attr = __ATTR(_name, 0664, \ > > > + mt6360_sysfs_show, mt6360_sysfs_store), \ > > > + .reg = MT6360_PMU_##_reg, \ > > > + .mask = MT6360_MASK_##_nbit, \ > > > + .shft = MT6360_SHFT_##_nbit, \ > > > +} > > > + > > > +#define MT6360_FIELD_RO(_name, _reg, _nbit) \ > > > +{ \ > > > + .dev_attr = __ATTR(_name, 0444, \ > > > + mt6360_sysfs_show, NULL), \ > > > + .reg = MT6360_PMU_##_reg, \ > > > + .mask = MT6360_MASK_##_nbit, \ > > > + .shft = MT6360_SHFT_##_nbit, \ > > > +} > > > + > > > +static struct mt6360_field_info mt6360_field_tbl[] = { > > > + MT6360_FIELD_RW(hiz, CHG_CTRL1, HIZ), > > > + MT6360_FIELD_RW(vmivr, CHG_CTRL6, VMIVR), > > > + MT6360_FIELD_RW(iaicr, CHG_CTRL3, IAICR), > > > + MT6360_FIELD_RW(SYSREG, CHG_CTRL11, SYSREG), > > > + MT6360_FIELD_RW(otg_oc, CHG_CTRL10, OTG_OC), > > > + MT6360_FIELD_RW(ichg, CHG_CTRL17, ICHG), > > > + MT6360_FIELD_RW(iprec, CHG_CTRL8, IPREC), > > > + MT6360_FIELD_RW(ieoc, CHG_CTRL9, IEOC), > > > + MT6360_FIELD_RW(voreg, CHG_CTRL4, VOREG), > > > + MT6360_FIELD_RW(lbp, CHG_CTRL10, LBP), > > > + MT6360_FIELD_RW(vrec, CHG_CTRL11, VREC), > > > + MT6360_FIELD_RW(te, CHG_CTRL2, TE), > > > + MT6360_FIELD_RW(chg_wdt_en, CHG_CTRL13, CHG_WDT_EN), > > > + MT6360_FIELD_RW(chg_wdt, CHG_CTRL13, CHG_WDT), > > > + MT6360_FIELD_RW(wt_fc, CHG_CTRL12, WT_FC), > > > + MT6360_FIELD_RW(bat_comp, CHG_CTRL18, BAT_COMP), > > > + MT6360_FIELD_RW(vclamp, CHG_CTRL18, VCLAMP), > > > + MT6360_FIELD_RW(usbchgen, DEVICE_TYPE, USBCHGEN), > > > + MT6360_FIELD_RW(chg_en, CHG_CTRL2, CHG_EN), > > > + MT6360_FIELD_RO(chrdet_ext, FOD_STAT, CHRDET_EXT), > > > +}; > > > + > > > +static struct attribute *mt6360_attrs[ARRAY_SIZE(mt6360_field_tbl) + 1]; > > > + > > > +static const struct attribute_group mt6360_attr_group = { > > > + .attrs = mt6360_attrs, > > > +}; > > > + > > > +static ssize_t mt6360_sysfs_show(struct device *dev, > > > + struct device_attribute *attr, char *buf) > > > +{ > > > + struct mt6360_chg_info *mci = dev_get_drvdata(dev->parent); > > > + struct mt6360_field_info *info = (void *)attr; > > > + unsigned int regval; > > > + int ret; > > > + > > > + ret = regmap_read(mci->regmap, info->reg, ®val); > > > + if (ret < 0) > > > + return ret; > > > + regval = (regval & info->mask) >> info->shft; > > > + return scnprintf(buf, PAGE_SIZE, "%02x\n", regval); > > > +} > > > + > > > +static ssize_t mt6360_sysfs_store(struct device *dev, > > > + struct device_attribute *attr, const char *buf, size_t count) > > > +{ > > > + struct mt6360_chg_info *mci = dev_get_drvdata(dev->parent); > > > + struct mt6360_field_info *info = (void *)attr; > > > + int ret, tmp; > > > + > > > + if (kstrtoint(buf, 10, &tmp) < 0) { > > > + dev_err(dev, "failed to parsing number\n"); > > > + return -EINVAL; > > > + } > > > + ret = regmap_update_bits(mci->regmap, > > > + info->reg, info->mask, tmp << info->shft); > > > + if (ret < 0) > > > + return ret; > > > + return count; > > > +} > > > + > > > +static int mt6360_sysfs_create_group(struct mt6360_chg_info *mci) > > > +{ > > > + int i, tb_size = ARRAY_SIZE(mt6360_field_tbl); > > > + > > > + for (i = 0; i < tb_size; i++) > > > + mt6360_attrs[i] = &(mt6360_field_tbl[i].dev_attr.attr); > > > + return devm_device_add_group(&mci->psy->dev, &mt6360_attr_group); > > > +} > > > + > > > +static int mt6360_chg_init_setting(struct mt6360_chg_info *mci) > > > +{ > > > + int ret; > > > + > > > + /* Disable bc12 */ > > > + ret = regmap_update_bits(mci->regmap, MT6360_PMU_DEVICE_TYPE, > > > + MT6360_MASK_USBCHGEN, 0); > > > + if (ret < 0) { > > > + dev_err(mci->dev, "%s: disable bc12 fail\n", __func__); > > > + goto out; > > > + } > > > + /* Set input current limit select by AICR */ > > > + ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL2, > > > + MT6360_MASK_IINLMTSEL, > > > + MT6360_IINLMTSEL_AICR << > > > + MT6360_SHFT_IINLMTSEL); > > > + if (ret < 0) { > > > + dev_err(mci->dev, > > > + "%s: switch iinlmtsel to aicr fail\n", __func__); > > > + goto out; > > > + } > > > + usleep_range(5000, 6000); > > > + /* Disable ilim */ > > > + ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL3, > > > + MT6360_MASK_ILIM_EN, 0); > > > + if (ret < 0) { > > > + dev_err(mci->dev, > > > + "%s: switch iinlmtsel to aicr fail\n", __func__); > > > + goto out; > > > + } > > > + /* Enlarge OTG_OC to max 3A */ > > > + ret = regmap_update_bits(mci->regmap, > > > + MT6360_PMU_CHG_CTRL10, 0x07, 0x07); > > > + if (ret < 0) { > > > + dev_err(mci->dev, > > > + "%s: faled config otg oc to maximum\n", __func__); > > > + } > > > +out: > > > + return ret; > > > +} > > > + > > > +static u32 mt6360_vinovp_trans_to_sel(u32 val) > > > +{ > > > + u32 vinovp_tbl[] = { 5500000, 6500000, 11000000, 14500000 }; > > > + int i; > > > + > > > + /* Select the smaller and equal supported value */ > > > + for (i = 0; i < ARRAY_SIZE(vinovp_tbl)-1; i++) { > > > + if (val < vinovp_tbl[i+1]) > > > + break; > > > + } > > > + return i; > > > +} > > > + > > > +static struct mt6360_chg_platform_data *mt6360_parse_pdata( > > > + struct platform_device *pdev) > > > +{ > > > + struct mt6360_chg_platform_data *pdata = dev_get_platdata(&pdev->dev); > > > + struct device_node *np = pdev->dev.of_node; > > > + int ret; > > > + > > > + pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); > > > + if (!pdata) > > > + return ERR_PTR(-ENOMEM); > > > + memcpy(pdata, &def_platform_data, sizeof(*pdata)); > > > > Use kmemdup or something similar. > > > > ACK > > > > + ret = of_property_read_u32(np, "vinovp", &pdata->vinovp); > > > + if (ret) { > > > + dev_err(&pdev->dev, "failed to parse vinovp in DT\n"); > > > + return ERR_PTR(ret); > > > + } > > > + return pdata; > > > +} > > > + > > > +static int mt6360_apply_pdata(struct platform_device *pdev) > > > +{ > > > + struct mt6360_chg_platform_data *pdata = dev_get_platdata(&pdev->dev); > > > + struct mt6360_chg_info *mci = dev_get_drvdata(&pdev->dev); > > > + int ret; > > > + u32 sel; > > > + > > > + sel = mt6360_vinovp_trans_to_sel(pdata->vinovp); > > > + ret = regmap_update_bits(mci->regmap, MT6360_PMU_CHG_CTRL19, > > > + MT6360_MASK_VINOVP, sel << MT6360_SHFT_VINOVP); > > > + if (ret) > > > + return ret; > > > + return 0; > > > +} > > > + > > > +static int mt6360_charger_probe(struct platform_device *pdev) > > > +{ > > > + struct mt6360_chg_platform_data *pdata = dev_get_platdata(&pdev->dev); > > > + struct mt6360_chg_info *mci; > > > + struct power_supply_config charger_cfg = {}; > > > + struct regulator_config config = { }; > > > + int ret; > > > + > > > + mci = devm_kzalloc(&pdev->dev, sizeof(*mci), GFP_KERNEL); > > > + if (!mci) > > > + return -ENOMEM; > > > + > > > + pdata = mt6360_parse_pdata(pdev); > > > + if (IS_ERR_OR_NULL(pdata)) > > > + return PTR_ERR(pdata); > > > + > > > + pdev->dev.platform_data = pdata; > > > + > > > + mci->dev = &pdev->dev; > > > + mutex_init(&mci->chgdet_lock); > > > + platform_set_drvdata(pdev, mci); > > > + INIT_WORK(&mci->chrdet_work, &mt6360_chrdet_work); > > > + > > > + mci->regmap = dev_get_regmap(pdev->dev.parent, NULL); > > > + if (!mci->regmap) { > > > + dev_err(&pdev->dev, "Failed to get parent regmap\n"); > > > + return -ENODEV; > > > + } > > > + > > > + ret = mt6360_apply_pdata(pdev); > > > + if (ret) { > > > + dev_err(&pdev->dev, "Failed to apply pdata\n"); > > > + return ret; > > > + } > > > + > > > + mci->edev = devm_extcon_dev_allocate(&pdev->dev, mt6360_extcon_cable); > > > + if (IS_ERR(mci->edev)) { > > > + dev_err(&pdev->dev, "Failed to allocate memory for extcon\n"); > > > + return -ENOMEM; > > > + } > > > + > > > + ret = devm_extcon_dev_register(&pdev->dev, mci->edev); > > > + if (ret) { > > > + dev_err(&pdev->dev, "Failed to register extcon dev\n"); > > > + return ret; > > > + } > > > + > > > + memcpy(&mci->psy_desc, &mt6360_charger_desc, sizeof(mci->psy_desc)); > > > + mci->psy_desc.name = dev_name(&pdev->dev); > > > + charger_cfg.drv_data = mci; > > > + charger_cfg.of_node = pdev->dev.of_node; > > > + charger_cfg.supplied_to = mt6360_charger_supplied_to; > > > + charger_cfg.num_supplicants = ARRAY_SIZE(mt6360_charger_supplied_to); > > > + mci->psy = devm_power_supply_register(&pdev->dev, > > > + &mci->psy_desc, &charger_cfg); > > > + if (IS_ERR(mci->psy)) { > > > + dev_err(&pdev->dev, "Failed to register power supply dev\n"); > > > + return PTR_ERR(mci->psy); > > > + } > > > + > > > + ret = mt6360_chg_init_setting(mci); > > > + if (ret) { > > > + dev_err(&pdev->dev, "Failed to initial setting\n"); > > > + return ret; > > > + } > > > + > > > + schedule_work(&mci->chrdet_work); > > > + > > > + ret = mt6360_chg_irq_register(pdev); > > > + if (ret) { > > > + dev_err(&pdev->dev, "Failed to register irqs\n"); > > > + return ret; > > > + } > > > + > > > + config.dev = &pdev->dev; > > > + config.regmap = mci->regmap; > > > + mci->otg_rdev = devm_regulator_register(&pdev->dev, &mt6360_otg_rdesc, > > > + &config); > > > + if (IS_ERR(mci->otg_rdev)) > > > + return PTR_ERR(mci->otg_rdev); > > > + > > > + ret = mt6360_sysfs_create_group(mci); > > > + if (ret) { > > > + dev_err(&pdev->dev, > > > + "%s: create sysfs attrs fail\n", __func__); > > > + return ret; > > > + } > > > + > > > + return 0; > > > +} > > > + > > > +static const struct of_device_id __maybe_unused mt6360_charger_of_id[] = { > > > + { .compatible = "mediatek,mt6360-chg", }, > > > + {}, > > > +}; > > > +MODULE_DEVICE_TABLE(of, mt6360_charger_of_id); > > > + > > > +static const struct platform_device_id mt6360_charger_id[] = { > > > + { "mt6360-chg", 0 }, > > > + {}, > > > +}; > > > +MODULE_DEVICE_TABLE(platform, mt6360_charger_id); > > > + > > > +static struct platform_driver mt6360_charger_driver = { > > > + .driver = { > > > + .name = "mt6360-chg", > > > + .owner = THIS_MODULE, > > > > Not needed. You did not run coccinelle, right? > > > > > + .of_match_table = of_match_ptr(mt6360_charger_of_id), > > > + }, > > > + .probe = mt6360_charger_probe, > > > + .id_table = mt6360_charger_id, > > > +}; > > > +module_platform_driver(mt6360_charger_driver); > > > + > > > +MODULE_AUTHOR("CY_Huang "); > > > +MODULE_DESCRIPTION("MT6360 Charger Driver"); > > > +MODULE_LICENSE("GPL"); > > > +MODULE_VERSION("1.0.0"); > > > > Skip version. > > > > > > ACK > > > All these comments were after looking briefly - I did not perform a > > thorough review. I am surprised that you combined regulator and charger > > driver in one. It is doable but makes driver bigger and more difficult > > to maintain. Consider splitting them. > > > > MT6360 charger is switching charger, Can I keep regulator for boost > OTG like bq24190? It's ok. Best regards, Krzysztof From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4542AC4363A for ; Tue, 27 Oct 2020 20:13:27 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BFEED20878 for ; Tue, 27 Oct 2020 20:13:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ySCmrN7v" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BFEED20878 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=XtAcg4fK+To76DlaO4Ngu2gXrygPO6rgaCppidY+AH0=; b=ySCmrN7vOkfDWE/sQZ1XteWzM y0W2CwHnhDJWe7Zh22SV1ttK7G9VVtaQ/rkGmg+5p9d3PO301tQKhxjlNZVpxzMqNlnenHRSBPqgQ Qac6aO2Op4mmlNTgaUa1NvrxZMXO/PWKZtEilAP6Jw+vRpDu3FW+VRkXV3WKiiJzO7qUIa2xPkkS0 1iElmKXjNAM774180u2rqLmxdYXtpHs48xF9CxlsbnnWH5chqkN0AHqWo09zGDbOgvDzpFy/Q9A3q l7fykCtQmxaRkCclPrpNjqUdXngqwVThk3TUZpiEA28EV+gpaHkbIeV2ft8hH4PZwIVaBdItzlP8d +l16Br9og==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kXVLI-0000NK-JW; Tue, 27 Oct 2020 20:13:16 +0000 Received: from mail-ej1-f68.google.com ([209.85.218.68]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kXVLB-0000LB-7O; Tue, 27 Oct 2020 20:13:10 +0000 Received: by mail-ej1-f68.google.com with SMTP id w27so4066572ejb.3; Tue, 27 Oct 2020 13:13:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=HqJmJCDPovYzugndA/OMAMO1DYv3EvZsetrZulAFRJo=; b=dxbiXco1nsZaug7Ext+RqO5fhXwmTJ3QlfX3hONzNtByXmMsTCSlIE6d4ovwNfx48G Cl3fHls9LbMlEpzmicdlfZ/4mjevvfEMhEXxq6irzAekulvPQGFqaH1ZMPbptR/2F+p5 DLHWBHTbT/ihKLIUfwa4w/+4mlIgd9Cnf9cBxy/X+Ne6+VX1Q20vDRErjoHADYmzpCr6 IlVxDkvlzo0xwBZBDfELEJg5/RyJ79lz3TdDJH5B+QkpcXRDvsxwcSb45O0HJnukb2tv XGbyCQSjoWeic6KyWygXjQTzO4GRqvXbqvnvExnT5TRFHIQTfi3juI4SJva+Rzgku6Bg bMqg== X-Gm-Message-State: AOAM531DJiyqgjr0q2Blp0HmBhsd8ol9Tl8rICPySo1DQM9ASPtL4CV8 XtYa8vrQSmjA4y/+4PsrqPE= X-Google-Smtp-Source: ABdhPJyxK5jb4+SSk0aVsGdjabxNWjpMoCztjBqVDZCFX5oikJ0sRp4orCdpmh6hLK6tm2a1tCG9/Q== X-Received: by 2002:a17:906:1411:: with SMTP id p17mr4377404ejc.102.1603829587542; Tue, 27 Oct 2020 13:13:07 -0700 (PDT) Received: from kozik-lap ([194.230.155.184]) by smtp.googlemail.com with ESMTPSA id u24sm1548170edo.92.2020.10.27.13.13.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Oct 2020 13:13:06 -0700 (PDT) Date: Tue, 27 Oct 2020 21:13:04 +0100 From: Krzysztof Kozlowski To: Gene Chen Subject: Re: [PATCH 2/2] power: supply: mt6360_charger: add MT6360 charger support Message-ID: <20201027201304.GA142632@kozik-lap> References: <1600859910-15855-1-git-send-email-gene.chen.richtek@gmail.com> <1600859910-15855-2-git-send-email-gene.chen.richtek@gmail.com> <20201016155227.GB9890@kozik-lap> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201027_161309_320630_753BDD8D X-CRM114-Status: GOOD ( 27.78 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gene Chen , devicetree , linux-pm@vger.kernel.org, sre@kernel.org, Linux Kernel Mailing List , cy_huang@richtek.com, Rob Herring , "moderated list:ARM/Mediatek SoC support" , Matthias Brugger , linux-arm Mailing List , shufan_lee@richtek.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org T24gTW9uLCBPY3QgMjYsIDIwMjAgYXQgMDI6NDU6MTJQTSArMDgwMCwgR2VuZSBDaGVuIHdyb3Rl Ogo+IEtyenlzenRvZiBLb3psb3dza2kgPGtyemtAa2VybmVsLm9yZz4g5pa8IDIwMjDlubQxMOac iDE25pelIOmAseS6lCDkuIvljYgxMTo1MuWvq+mBk++8mgo+ID4KIAo+IE5vLCBJIHdpbGwgcmVt b3ZlIGl0Lgo+IAo+ID4gPiArICAgICAgICAgICAgIGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnlu YW1lKHBkZXYsIGlycV9kZXNjLT5uYW1lKTsKPiA+Cj4gPiBJbnRlcnJ1cHRzIHdlcmUgbm90IGRl c2NyaWJlZCBpbiB0aGUgYmluZGluZ3MuCj4gPgo+IAo+IEkgYWRkIHJlc291cmNlIHdoZW4gTUZE IGRyaXZlciBhZGQgc3ViLWRldmljZS4gU2hvdWxkIEkgYWRkIHNvbWV0aGluZwo+IGluIGR0LWJp bmRpbmc/CgpJIHRoaW5rIEkgbWlzc2VkIHRoZSBwYXJ0IHRoYXQgeW91IGFyZSB0YWtpbmcgaGVy ZSBpbnRlcnJ1cHRzIGZyb20KcGFyZW50IE1GRCBkZXZpY2UuIEJpbmRpbmdzIGFyZSBmaW5lIHRo ZW4uCgo+IAo+ICAgICAgICByZXQgPSBkZXZtX21mZF9hZGRfZGV2aWNlcygmY2xpZW50LT5kZXYs IFBMQVRGT1JNX0RFVklEX0FVVE8sCj4gbXQ2MzYwX2RldnMsCj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKG10NjM2MF9kZXZzKSwgTlVMTCwgMCwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ21hcF9pcnFfZ2V0X2RvbWFpbihkZGF0 YS0+aXJxX2RhdGEpKTsKPiAKPiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIG10NjM2MF9j aGdfcmVzb3VyY2VzW10gPSB7Cj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9OQU1FRChNVDYzNjBf Q0hHX1RSRUdfRVZULCAiY2hnX3RyZWdfZXZ0IiksCj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9O QU1FRChNVDYzNjBfUFdSX1JEWV9FVlQsICJwd3JfcmR5X2V2dCIpLAo+ICAgICAgICAgREVGSU5F X1JFU19JUlFfTkFNRUQoTVQ2MzYwX0NIR19CQVRTWVNVVl9FVlQsCj4gImNoZ19iYXRzeXN1dl9l dnQiKSwKPiAgICAgICAgIERFRklORV9SRVNfSVJRX05BTUVEKE1UNjM2MF9DSEdfVlNZU1VWX0VW VCwgImNoZ192c3lzdXZfZXZ0IiksCj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9OQU1FRChNVDYz NjBfQ0hHX1ZTWVNPVl9FVlQsICJjaGdfdnN5c292X2V2dCIpLAo+ICAgICAgICAgREVGSU5FX1JF U19JUlFfTkFNRUQoTVQ2MzYwX0NIR19WQkFUT1ZfRVZULCAiY2hnX3ZiYXRvdl9ldnQiKSwKPiAg ICAgICAgIERFRklORV9SRVNfSVJRX05BTUVEKE1UNjM2MF9DSEdfVkJVU09WX0VWVCwgImNoZ192 YnVzb3ZfZXZ0IiksCj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9OQU1FRChNVDYzNjBfQ0hHX0FJ Q0NNRUFTTCwgImNoZ19haWNjbWVhc2wiKSwKPiAgICAgICAgIERFRklORV9SRVNfSVJRX05BTUVE KE1UNjM2MF9XRFRNUkksICJ3ZHRtcmkiKSwKPiAgICAgICAgIERFRklORV9SRVNfSVJRX05BTUVE KE1UNjM2MF9DSEdfUkVDSEdJLCAiY2hnX3JlY2hnaSIpLAo+ICAgICAgICAgREVGSU5FX1JFU19J UlFfTkFNRUQoTVQ2MzYwX0NIR19URVJNSSwgImNoZ190ZXJtaSIpLAo+ICAgICAgICAgREVGSU5F X1JFU19JUlFfTkFNRUQoTVQ2MzYwX0NIR19JRU9DSSwgImNoZ19pZW9jaSIpLAo+ICAgICAgICAg REVGSU5FX1JFU19JUlFfTkFNRUQoTVQ2MzYwX1BVTVBYX0RPTkVJLCAicHVtcHhfZG9uZWkiKSwK PiAgICAgICAgIERFRklORV9SRVNfSVJRX05BTUVEKE1UNjM2MF9BVFRBQ0hfSSwgImF0dGFjaF9p IiksCj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9OQU1FRChNVDYzNjBfQ0hSREVUX0VYVF9FVlQs ICJjaHJkZXRfZXh0X2V2dCIpLAo+IAo+ID4gPiArICAgICAgICAgICAgIGlmIChpcnEgPCAwKQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiA+ICsgICAgICAgICAgICAg cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmcGRldi0+ZGV2LCBpcnEsIE5VTEwsCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfZGVz Yy0+aXJxX2hhbmRsZXIsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJUlFGX1RSSUdHRVJfRkFMTElORywKPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycV9kZXNjLT5uYW1lLAo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fZ2V0X2RydmRh dGEocGRldikpOwo+ID4KPiA+IFdoeSB5b3UgdXNlIGhhbmRsZXIgdGhyZWFkIHBlciBlYWNoIGlu dGVycnVwdD8gVGhpcyBzaG91bGQgYmUgcmF0aGVyIG9uZQo+ID4gaGFuZGxlci4gRXNwZWNpYWxs eSB0aGF0IG1vc3Qgb2YgeW91ciBoYW5kbGVycyBkbyBub3RoaW5nLgo+ID4KPiAKPiBJIHdpbGwg cmVtb3ZlIHNlcnZlcmFsIGlycXMgd2hpY2ggaXMgZG8gbm90aGluZywgYW5kIG9ubHkga2VlcAo+ IGNocmRldF9leHQgZm9yIHBvd2VyIHJlYWR5IGFuZCBhdHRhY2hpIGZvciBiYzEyIGRvbmUuCj4g SSBhZGQgc2VydmVyYWwgcmVzb3VyY2VzIGluIE1GRCBkZXZpY2UuCj4gRG8geW91IG1lYW4gSSB1 c2UgSVJRRl9TSEFSRUQgdG8gcmVkdWNlIGlycT8KCkkgbWVhbnQgdG8gdXNlIG9uIHRocmVhZF9m biBmb3IgbW9zdCBvZiB0aGVtLiBJIHRoaW5rLCBpZiB5b3Ugd2VyZSB1c2luZwpyZWdtYXBfaXJx X2NoaXAgYW5kIHZpcnR1YWwgSVJRIGhlcmUgKHNlZSByZWdtYXBfaXJxX2dldF92aXJxKSwgeW91 CmNvdWxkIGVudGlyZWx5IHNraXAgdGhlIG5vbi1pbXBvcnRhbnQgaW50ZXJydXB0cy4gSnVzdCBp Z25vcmUgdGhlbS4KU2hvdWxkIGJlIGxlc3MgY29kZS4KCj4gCj4gPiA+ICsgICAgICAgICAgICAg aWYgKHJldCA8IDApIHsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYt PmRldiwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVlc3QgJXMgaXJx IGZhaWxcbiIsIGlycV9kZXNjLT5uYW1lKTsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJl dHVybiByZXQ7Cj4gPiA+ICsgICAgICAgICAgICAgfQo+ID4gPiArICAgICB9Cj4gPiA+ICsgICAg IHJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdHJ1Y3QgbXQ2MzYwX2ZpZWxkX2lu Zm8gewo+ID4gPiArICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cjsKPiA+ID4g KyAgICAgdTggcmVnOwo+ID4gPiArICAgICB1OCBtYXNrOwo+ID4gPiArICAgICB1OCBzaGZ0Owo+ ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIHNzaXplX3QgbXQ2MzYwX3N5c2ZzX3Nob3co c3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiArICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpidWYpOwo+ID4gPiArc3RhdGljIHNzaXplX3QgbXQ2MzYwX3N5 c2ZzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gKyAgICAgICAgICAgICBzdHJ1Y3Qg ZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwo+ ID4gPiArCj4gPiA+ICsjZGVmaW5lIE1UNjM2MF9GSUVMRF9SVyhfbmFtZSwgX3JlZywgX25iaXQp ICAgICAgICAgICAgICAgICAgXAo+ID4gPiAreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gKyAgICAgLmRldl9hdHRyID0g X19BVFRSKF9uYW1lLCAwNjY0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgIG10NjM2MF9zeXNmc19zaG93LCBtdDYzNjBfc3lzZnNfc3RvcmUpLCAg XAo+ID4gPiArICAgICAucmVnICAgID0gTVQ2MzYwX1BNVV8jI19yZWcsICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiA+ID4gKyAgICAgLm1hc2sgICA9IE1UNjM2MF9NQVNLXyMjX25iaXQs ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ICsgICAgIC5zaGZ0ICAgPSBNVDYzNjBf U0hGVF8jI19uYml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICsjZGVmaW5lIE1UNjM2MF9GSUVMRF9STyhfbmFtZSwgX3JlZywgX25iaXQpICAgICAg ICAgICAgICAgICAgXAo+ID4gPiAreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gKyAgICAgLmRldl9hdHRyID0gX19BVFRS KF9uYW1lLCAwNDQ0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICBtdDYzNjBfc3lzZnNfc2hvdywgTlVMTCksICAgICAgICAgICAgICAgXAo+ID4g PiArICAgICAucmVnICAgID0gTVQ2MzYwX1BNVV8jI19yZWcsICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPiA+ID4gKyAgICAgLm1hc2sgICA9IE1UNjM2MF9NQVNLXyMjX25iaXQsICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ICsgICAgIC5zaGZ0ICAgPSBNVDYzNjBfU0hGVF8j I19uYml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICtzdGF0aWMgc3RydWN0IG10NjM2MF9maWVsZF9pbmZvIG10NjM2MF9maWVsZF90YmxbXSA9IHsK PiA+ID4gKyAgICAgTVQ2MzYwX0ZJRUxEX1JXKGhpeiwgICAgICAgICAgICBDSEdfQ1RSTDEsICAg ICAgSElaKSwKPiA+ID4gKyAgICAgTVQ2MzYwX0ZJRUxEX1JXKHZtaXZyLCAgICAgICAgICBDSEdf Q1RSTDYsICAgICAgVk1JVlIpLAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlcoaWFpY3IsICAg ICAgICAgIENIR19DVFJMMywgICAgICBJQUlDUiksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9S VyhTWVNSRUcsICAgICAgICAgQ0hHX0NUUkwxMSwgICAgIFNZU1JFRyksCj4gPiA+ICsgICAgIE1U NjM2MF9GSUVMRF9SVyhvdGdfb2MsICAgICAgICAgQ0hHX0NUUkwxMCwgICAgIE9UR19PQyksCj4g PiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyhpY2hnLCAgICAgICAgICAgQ0hHX0NUUkwxNywgICAg IElDSEcpLAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlcoaXByZWMsICAgICAgICAgIENIR19D VFJMOCwgICAgICBJUFJFQyksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyhpZW9jLCAgICAg ICAgICAgQ0hHX0NUUkw5LCAgICAgIElFT0MpLAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlco dm9yZWcsICAgICAgICAgIENIR19DVFJMNCwgICAgICBWT1JFRyksCj4gPiA+ICsgICAgIE1UNjM2 MF9GSUVMRF9SVyhsYnAsICAgICAgICAgICAgQ0hHX0NUUkwxMCwgICAgIExCUCksCj4gPiA+ICsg ICAgIE1UNjM2MF9GSUVMRF9SVyh2cmVjLCAgICAgICAgICAgQ0hHX0NUUkwxMSwgICAgIFZSRUMp LAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlcodGUsICAgICAgICAgICAgIENIR19DVFJMMiwg ICAgICBURSksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyhjaGdfd2R0X2VuLCAgICAgQ0hH X0NUUkwxMywgICAgIENIR19XRFRfRU4pLAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlcoY2hn X3dkdCwgICAgICAgIENIR19DVFJMMTMsICAgICBDSEdfV0RUKSwKPiA+ID4gKyAgICAgTVQ2MzYw X0ZJRUxEX1JXKHd0X2ZjLCAgICAgICAgICBDSEdfQ1RSTDEyLCAgICAgV1RfRkMpLAo+ID4gPiAr ICAgICBNVDYzNjBfRklFTERfUlcoYmF0X2NvbXAsICAgICAgIENIR19DVFJMMTgsICAgICBCQVRf Q09NUCksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyh2Y2xhbXAsICAgICAgICAgQ0hHX0NU UkwxOCwgICAgIFZDTEFNUCksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyh1c2JjaGdlbiwg ICAgICAgREVWSUNFX1RZUEUsICAgIFVTQkNIR0VOKSwKPiA+ID4gKyAgICAgTVQ2MzYwX0ZJRUxE X1JXKGNoZ19lbiwgICAgICAgICBDSEdfQ1RSTDIsICAgICAgQ0hHX0VOKSwKPiA+ID4gKyAgICAg TVQ2MzYwX0ZJRUxEX1JPKGNocmRldF9leHQsICAgICBGT0RfU1RBVCwgICAgICAgQ0hSREVUX0VY VCksCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbXQ2 MzYwX2F0dHJzW0FSUkFZX1NJWkUobXQ2MzYwX2ZpZWxkX3RibCkgKyAxXTsKPiA+ID4gKwo+ID4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbXQ2MzYwX2F0dHJfZ3JvdXAg PSB7Cj4gPiA+ICsgICAgIC5hdHRycyA9IG10NjM2MF9hdHRycywKPiA+ID4gK307Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBzc2l6ZV90IG10NjM2MF9zeXNmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRl diwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gPiA+ICt7Cj4gPiA+ICsgICAgIHN0cnVjdCBtdDYz NjBfY2hnX2luZm8gKm1jaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7Cj4gPiA+ICsg ICAgIHN0cnVjdCBtdDYzNjBfZmllbGRfaW5mbyAqaW5mbyA9ICh2b2lkICopYXR0cjsKPiA+ID4g KyAgICAgdW5zaWduZWQgaW50IHJlZ3ZhbDsKPiA+ID4gKyAgICAgaW50IHJldDsKPiA+ID4gKwo+ ID4gPiArICAgICByZXQgPSByZWdtYXBfcmVhZChtY2ktPnJlZ21hcCwgaW5mby0+cmVnLCAmcmVn dmFsKTsKPiA+ID4gKyAgICAgaWYgKHJldCA8IDApCj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJu IHJldDsKPiA+ID4gKyAgICAgcmVndmFsID0gKHJlZ3ZhbCAmIGluZm8tPm1hc2spID4+IGluZm8t PnNoZnQ7Cj4gPiA+ICsgICAgIHJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJ4 XG4iLCByZWd2YWwpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3NpemVfdCBtdDYz NjBfc3lzZnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiArICAgICAgICAgICAgICAg IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBj b3VudCkKPiA+ID4gK3sKPiA+ID4gKyAgICAgc3RydWN0IG10NjM2MF9jaGdfaW5mbyAqbWNpID0g ZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKPiA+ID4gKyAgICAgc3RydWN0IG10NjM2MF9m aWVsZF9pbmZvICppbmZvID0gKHZvaWQgKilhdHRyOwo+ID4gPiArICAgICBpbnQgcmV0LCB0bXA7 Cj4gPiA+ICsKPiA+ID4gKyAgICAgaWYgKGtzdHJ0b2ludChidWYsIDEwLCAmdG1wKSA8IDApIHsK PiA+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwYXJzaW5nIG51bWJl clxuIik7Cj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsgICAgIH0K PiA+ID4gKyAgICAgcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKG1jaS0+cmVnbWFwLAo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+cmVnLCBpbmZvLT5tYXNrLCB0bXAg PDwgaW5mby0+c2hmdCk7Cj4gPiA+ICsgICAgIGlmIChyZXQgPCAwKQo+ID4gPiArICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4gPiA+ICsgICAgIHJldHVybiBjb3VudDsKPiA+ID4gK30KPiA+ID4g Kwo+ID4gPiArc3RhdGljIGludCBtdDYzNjBfc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBtdDYz NjBfY2hnX2luZm8gKm1jaSkKPiA+ID4gK3sKPiA+ID4gKyAgICAgaW50IGksIHRiX3NpemUgPSBB UlJBWV9TSVpFKG10NjM2MF9maWVsZF90YmwpOwo+ID4gPiArCj4gPiA+ICsgICAgIGZvciAoaSA9 IDA7IGkgPCB0Yl9zaXplOyBpKyspCj4gPiA+ICsgICAgICAgICAgICAgbXQ2MzYwX2F0dHJzW2ld ID0gJihtdDYzNjBfZmllbGRfdGJsW2ldLmRldl9hdHRyLmF0dHIpOwo+ID4gPiArICAgICByZXR1 cm4gZGV2bV9kZXZpY2VfYWRkX2dyb3VwKCZtY2ktPnBzeS0+ZGV2LCAmbXQ2MzYwX2F0dHJfZ3Jv dXApOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IG10NjM2MF9jaGdfaW5pdF9z ZXR0aW5nKHN0cnVjdCBtdDYzNjBfY2hnX2luZm8gKm1jaSkKPiA+ID4gK3sKPiA+ID4gKyAgICAg aW50IHJldDsKPiA+ID4gKwo+ID4gPiArICAgICAvKiBEaXNhYmxlIGJjMTIgKi8KPiA+ID4gKyAg ICAgcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKG1jaS0+cmVnbWFwLCBNVDYzNjBfUE1VX0RFVklD RV9UWVBFLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVQ2MzYwX01BU0tf VVNCQ0hHRU4sIDApOwo+ID4gPiArICAgICBpZiAocmV0IDwgMCkgewo+ID4gPiArICAgICAgICAg ICAgIGRldl9lcnIobWNpLT5kZXYsICIlczogZGlzYWJsZSBiYzEyIGZhaWxcbiIsIF9fZnVuY19f KTsKPiA+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ID4gKyAgICAgfQo+ID4gPiArICAg ICAvKiBTZXQgaW5wdXQgY3VycmVudCBsaW1pdCBzZWxlY3QgYnkgQUlDUiAqLwo+ID4gPiArICAg ICByZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMobWNpLT5yZWdtYXAsIE1UNjM2MF9QTVVfQ0hHX0NU UkwyLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVQ2MzYwX01BU0tfSUlO TE1UU0VMLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVQ2MzYwX0lJTkxN VFNFTF9BSUNSIDw8Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TVQ2MzYwX1NIRlRfSUlOTE1UU0VMKTsKPiA+ID4gKyAgICAgaWYgKHJldCA8IDApIHsKPiA+ID4g KyAgICAgICAgICAgICBkZXZfZXJyKG1jaS0+ZGV2LAo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgIiVzOiBzd2l0Y2ggaWlubG10c2VsIHRvIGFpY3IgZmFpbFxuIiwgX19mdW5jX18pOwo+ID4g PiArICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gPiArICAgICB9Cj4gPiA+ICsgICAgIHVzbGVl cF9yYW5nZSg1MDAwLCA2MDAwKTsKPiA+ID4gKyAgICAgLyogRGlzYWJsZSBpbGltICovCj4gPiA+ ICsgICAgIHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhtY2ktPnJlZ21hcCwgTVQ2MzYwX1BNVV9D SEdfQ1RSTDMsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVDYzNjBfTUFT S19JTElNX0VOLCAwKTsKPiA+ID4gKyAgICAgaWYgKHJldCA8IDApIHsKPiA+ID4gKyAgICAgICAg ICAgICBkZXZfZXJyKG1jaS0+ZGV2LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIiVzOiBz d2l0Y2ggaWlubG10c2VsIHRvIGFpY3IgZmFpbFxuIiwgX19mdW5jX18pOwo+ID4gPiArICAgICAg ICAgICAgIGdvdG8gb3V0Owo+ID4gPiArICAgICB9Cj4gPiA+ICsgICAgIC8qIEVubGFyZ2UgT1RH X09DIHRvIG1heCAzQSAqLwo+ID4gPiArICAgICByZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMobWNp LT5yZWdtYXAsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVDYzNjBfUE1V X0NIR19DVFJMMTAsIDB4MDcsIDB4MDcpOwo+ID4gPiArICAgICBpZiAocmV0IDwgMCkgewo+ID4g PiArICAgICAgICAgICAgIGRldl9lcnIobWNpLT5kZXYsCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAiJXM6IGZhbGVkIGNvbmZpZyBvdGcgb2MgdG8gbWF4aW11bVxuIiwgX19mdW5jX18pOwo+ ID4gPiArICAgICB9Cj4gPiA+ICtvdXQ6Cj4gPiA+ICsgICAgIHJldHVybiByZXQ7Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB1MzIgbXQ2MzYwX3Zpbm92cF90cmFuc190b19zZWwodTMy IHZhbCkKPiA+ID4gK3sKPiA+ID4gKyAgICAgdTMyIHZpbm92cF90YmxbXSA9IHsgNTUwMDAwMCwg NjUwMDAwMCwgMTEwMDAwMDAsIDE0NTAwMDAwIH07Cj4gPiA+ICsgICAgIGludCBpOwo+ID4gPiAr Cj4gPiA+ICsgICAgIC8qIFNlbGVjdCB0aGUgc21hbGxlciBhbmQgZXF1YWwgc3VwcG9ydGVkIHZh bHVlICovCj4gPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpbm92cF90Ymwp LTE7IGkrKykgewo+ID4gPiArICAgICAgICAgICAgIGlmICh2YWwgPCB2aW5vdnBfdGJsW2krMV0p Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKyAgICAgfQo+ID4gPiAr ICAgICByZXR1cm4gaTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHN0cnVjdCBtdDYz NjBfY2hnX3BsYXRmb3JtX2RhdGEgKm10NjM2MF9wYXJzZV9wZGF0YSgKPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gPiA+ICt7Cj4gPiA+ICsgICAgIHN0cnVjdCBtdDYzNjBfY2hnX3BsYXRm b3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKPiA+ID4gKyAg ICAgc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwo+ID4gPiArICAg ICBpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsgICAgIHBkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2 LT5kZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKyAgICAgaWYgKCFwZGF0 YSkKPiA+ID4gKyAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gKyAg ICAgbWVtY3B5KHBkYXRhLCAmZGVmX3BsYXRmb3JtX2RhdGEsIHNpemVvZigqcGRhdGEpKTsKPiA+ Cj4gPiBVc2Uga21lbWR1cCBvciBzb21ldGhpbmcgc2ltaWxhci4KPiA+Cj4gCj4gQUNLCj4gCj4g PiA+ICsgICAgIHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAidmlub3ZwIiwgJnBkYXRh LT52aW5vdnApOwo+ID4gPiArICAgICBpZiAocmV0KSB7Cj4gPiA+ICsgICAgICAgICAgICAgZGV2 X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBhcnNlIHZpbm92cCBpbiBEVFxuIik7Cj4gPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ID4gKyAgICAgfQo+ID4gPiAr ICAgICByZXR1cm4gcGRhdGE7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgbXQ2 MzYwX2FwcGx5X3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ICt7Cj4g PiA+ICsgICAgIHN0cnVjdCBtdDYzNjBfY2hnX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dl dF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKPiA+ID4gKyAgICAgc3RydWN0IG10NjM2MF9jaGdfaW5m byAqbWNpID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwo+ID4gPiArICAgICBpbnQgcmV0 Owo+ID4gPiArICAgICB1MzIgc2VsOwo+ID4gPiArCj4gPiA+ICsgICAgIHNlbCA9IG10NjM2MF92 aW5vdnBfdHJhbnNfdG9fc2VsKHBkYXRhLT52aW5vdnApOwo+ID4gPiArICAgICByZXQgPSByZWdt YXBfdXBkYXRlX2JpdHMobWNpLT5yZWdtYXAsIE1UNjM2MF9QTVVfQ0hHX0NUUkwxOSwKPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UNjM2MF9NQVNLX1ZJTk9WUCwgc2VsIDw8 IE1UNjM2MF9TSEZUX1ZJTk9WUCk7Cj4gPiA+ICsgICAgIGlmIChyZXQpCj4gPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIHJldDsKPiA+ID4gKyAgICAgcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBpbnQgbXQ2MzYwX2NoYXJnZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPiA+ID4gK3sKPiA+ID4gKyAgICAgc3RydWN0IG10NjM2MF9jaGdfcGxhdGZv cm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwo+ID4gPiArICAg ICBzdHJ1Y3QgbXQ2MzYwX2NoZ19pbmZvICptY2k7Cj4gPiA+ICsgICAgIHN0cnVjdCBwb3dlcl9z dXBwbHlfY29uZmlnIGNoYXJnZXJfY2ZnID0ge307Cj4gPiA+ICsgICAgIHN0cnVjdCByZWd1bGF0 b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKPiA+ID4gKyAgICAgaW50IHJldDsKPiA+ID4gKwo+ID4g PiArICAgICBtY2kgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCptY2kpLCBHRlBf S0VSTkVMKTsKPiA+ID4gKyAgICAgaWYgKCFtY2kpCj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FTk9NRU07Cj4gPiA+ICsKPiA+ID4gKyAgICAgcGRhdGEgPSBtdDYzNjBfcGFyc2VfcGRhdGEo cGRldik7Cj4gPiA+ICsgICAgIGlmIChJU19FUlJfT1JfTlVMTChwZGF0YSkpCj4gPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIFBUUl9FUlIocGRhdGEpOwo+ID4gPiArCj4gPiA+ICsgICAgIHBkZXYt PmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7Cj4gPiA+ICsKPiA+ID4gKyAgICAgbWNpLT5kZXYg PSAmcGRldi0+ZGV2Owo+ID4gPiArICAgICBtdXRleF9pbml0KCZtY2ktPmNoZ2RldF9sb2NrKTsK PiA+ID4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNpKTsKPiA+ID4gKyAgICAg SU5JVF9XT1JLKCZtY2ktPmNocmRldF93b3JrLCAmbXQ2MzYwX2NocmRldF93b3JrKTsKPiA+ID4g Kwo+ID4gPiArICAgICBtY2ktPnJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKHBkZXYtPmRldi5wYXJl bnQsIE5VTEwpOwo+ID4gPiArICAgICBpZiAoIW1jaS0+cmVnbWFwKSB7Cj4gPiA+ICsgICAgICAg ICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBwYXJlbnQgcmVnbWFwXG4i KTsKPiA+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiA+ID4gKyAgICAgfQo+ID4g PiArCj4gPiA+ICsgICAgIHJldCA9IG10NjM2MF9hcHBseV9wZGF0YShwZGV2KTsKPiA+ID4gKyAg ICAgaWYgKHJldCkgewo+ID4gPiArICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIkZh aWxlZCB0byBhcHBseSBwZGF0YVxuIik7Cj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsK PiA+ID4gKyAgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgIG1jaS0+ZWRldiA9IGRldm1fZXh0Y29u X2Rldl9hbGxvY2F0ZSgmcGRldi0+ZGV2LCBtdDYzNjBfZXh0Y29uX2NhYmxlKTsKPiA+ID4gKyAg ICAgaWYgKElTX0VSUihtY2ktPmVkZXYpKSB7Cj4gPiA+ICsgICAgICAgICAgICAgZGV2X2Vycigm cGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZXh0Y29uXG4iKTsKPiA+ ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+ID4gKyAgICAgfQo+ID4gPiArCj4g PiA+ICsgICAgIHJldCA9IGRldm1fZXh0Y29uX2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCBtY2kt PmVkZXYpOwo+ID4gPiArICAgICBpZiAocmV0KSB7Cj4gPiA+ICsgICAgICAgICAgICAgZGV2X2Vy cigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGV4dGNvbiBkZXZcbiIpOwo+ID4gPiAr ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiA+ICsgICAgIH0KPiA+ID4gKwo+ID4gPiArICAg ICBtZW1jcHkoJm1jaS0+cHN5X2Rlc2MsICZtdDYzNjBfY2hhcmdlcl9kZXNjLCBzaXplb2YobWNp LT5wc3lfZGVzYykpOwo+ID4gPiArICAgICBtY2ktPnBzeV9kZXNjLm5hbWUgPSBkZXZfbmFtZSgm cGRldi0+ZGV2KTsKPiA+ID4gKyAgICAgY2hhcmdlcl9jZmcuZHJ2X2RhdGEgPSBtY2k7Cj4gPiA+ ICsgICAgIGNoYXJnZXJfY2ZnLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKPiA+ID4gKyAg ICAgY2hhcmdlcl9jZmcuc3VwcGxpZWRfdG8gPSBtdDYzNjBfY2hhcmdlcl9zdXBwbGllZF90bzsK PiA+ID4gKyAgICAgY2hhcmdlcl9jZmcubnVtX3N1cHBsaWNhbnRzID0gQVJSQVlfU0laRShtdDYz NjBfY2hhcmdlcl9zdXBwbGllZF90byk7Cj4gPiA+ICsgICAgIG1jaS0+cHN5ID0gZGV2bV9wb3dl cl9zdXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmbWNpLT5wc3lfZGVzYywgJmNoYXJnZXJfY2ZnKTsKPiA+ ID4gKyAgICAgaWYgKElTX0VSUihtY2ktPnBzeSkpIHsKPiA+ID4gKyAgICAgICAgICAgICBkZXZf ZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcG93ZXIgc3VwcGx5IGRldlxuIik7 Cj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIobWNpLT5wc3kpOwo+ID4gPiArICAg ICB9Cj4gPiA+ICsKPiA+ID4gKyAgICAgcmV0ID0gbXQ2MzYwX2NoZ19pbml0X3NldHRpbmcobWNp KTsKPiA+ID4gKyAgICAgaWYgKHJldCkgewo+ID4gPiArICAgICAgICAgICAgIGRldl9lcnIoJnBk ZXYtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsIHNldHRpbmdcbiIpOwo+ID4gPiArICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4gPiA+ICsgICAgIH0KPiA+ID4gKwo+ID4gPiArICAgICBzY2hlZHVs ZV93b3JrKCZtY2ktPmNocmRldF93b3JrKTsKPiA+ID4gKwo+ID4gPiArICAgICByZXQgPSBtdDYz NjBfY2hnX2lycV9yZWdpc3RlcihwZGV2KTsKPiA+ID4gKyAgICAgaWYgKHJldCkgewo+ID4gPiAr ICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBpcnFz XG4iKTsKPiA+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gPiArICAgICB9Cj4gPiA+ ICsKPiA+ID4gKyAgICAgY29uZmlnLmRldiA9ICZwZGV2LT5kZXY7Cj4gPiA+ICsgICAgIGNvbmZp Zy5yZWdtYXAgPSBtY2ktPnJlZ21hcDsKPiA+ID4gKyAgICAgbWNpLT5vdGdfcmRldiA9IGRldm1f cmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZtdDYzNjBfb3RnX3JkZXNjLAo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmZpZyk7Cj4g PiA+ICsgICAgIGlmIChJU19FUlIobWNpLT5vdGdfcmRldikpCj4gPiA+ICsgICAgICAgICAgICAg cmV0dXJuIFBUUl9FUlIobWNpLT5vdGdfcmRldik7Cj4gPiA+ICsKPiA+ID4gKyAgICAgcmV0ID0g bXQ2MzYwX3N5c2ZzX2NyZWF0ZV9ncm91cChtY2kpOwo+ID4gPiArICAgICBpZiAocmV0KSB7Cj4g PiA+ICsgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LAo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgIiVzOiBjcmVhdGUgc3lzZnMgYXR0cnMgZmFpbFxuIiwgX19mdW5jX18pOwo+ID4g PiArICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiA+ICsgICAgIH0KPiA+ID4gKwo+ID4gPiAr ICAgICByZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbXQ2MzYwX2NoYXJnZXJfb2ZfaWRbXSA9IHsK PiA+ID4gKyAgICAgeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDYzNjAtY2hnIiwgfSwKPiA+ ID4gKyAgICAge30sCj4gPiA+ICt9Owo+ID4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ2 MzYwX2NoYXJnZXJfb2ZfaWQpOwo+ID4gPiArCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBs YXRmb3JtX2RldmljZV9pZCBtdDYzNjBfY2hhcmdlcl9pZFtdID0gewo+ID4gPiArICAgICB7ICJt dDYzNjAtY2hnIiwgMCB9LAo+ID4gPiArICAgICB7fSwKPiA+ID4gK307Cj4gPiA+ICtNT0RVTEVf REVWSUNFX1RBQkxFKHBsYXRmb3JtLCBtdDYzNjBfY2hhcmdlcl9pZCk7Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10NjM2MF9jaGFyZ2VyX2RyaXZlciA9IHsK PiA+ID4gKyAgICAgLmRyaXZlciA9IHsKPiA+ID4gKyAgICAgICAgICAgICAubmFtZSA9ICJtdDYz NjAtY2hnIiwKPiA+ID4gKyAgICAgICAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKPiA+Cj4g PiBOb3QgbmVlZGVkLiBZb3UgZGlkIG5vdCBydW4gY29jY2luZWxsZSwgcmlnaHQ/Cj4gPgo+ID4g PiArICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihtdDYzNjBfY2hh cmdlcl9vZl9pZCksCj4gPiA+ICsgICAgIH0sCj4gPiA+ICsgICAgIC5wcm9iZSA9IG10NjM2MF9j aGFyZ2VyX3Byb2JlLAo+ID4gPiArICAgICAuaWRfdGFibGUgPSBtdDYzNjBfY2hhcmdlcl9pZCwK PiA+ID4gK307Cj4gPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10NjM2MF9jaGFyZ2VyX2Ry aXZlcik7Cj4gPiA+ICsKPiA+ID4gK01PRFVMRV9BVVRIT1IoIkNZX0h1YW5nIDxjeV9odWFuZ0By aWNodGVrLmNvbT4iKTsKPiA+ID4gK01PRFVMRV9ERVNDUklQVElPTigiTVQ2MzYwIENoYXJnZXIg RHJpdmVyIik7Cj4gPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gPiA+ICtNT0RVTEVfVkVS U0lPTigiMS4wLjAiKTsKPiA+Cj4gPiBTa2lwIHZlcnNpb24uCj4gPgo+ID4KPiAKPiBBQ0sKPiAK PiA+IEFsbCB0aGVzZSBjb21tZW50cyB3ZXJlIGFmdGVyIGxvb2tpbmcgYnJpZWZseSAtIEkgZGlk IG5vdCBwZXJmb3JtIGEKPiA+IHRob3JvdWdoIHJldmlldy4gIEkgYW0gc3VycHJpc2VkIHRoYXQg eW91IGNvbWJpbmVkIHJlZ3VsYXRvciBhbmQgY2hhcmdlcgo+ID4gZHJpdmVyIGluIG9uZS4gSXQg aXMgZG9hYmxlIGJ1dCBtYWtlcyBkcml2ZXIgYmlnZ2VyIGFuZCBtb3JlIGRpZmZpY3VsdAo+ID4g dG8gbWFpbnRhaW4uIENvbnNpZGVyIHNwbGl0dGluZyB0aGVtLgo+ID4KPiAKPiBNVDYzNjAgY2hh cmdlciBpcyBzd2l0Y2hpbmcgY2hhcmdlciwgQ2FuIEkga2VlcCByZWd1bGF0b3IgZm9yIGJvb3N0 Cj4gT1RHIGxpa2UgYnEyNDE5MD8KCkl0J3Mgb2suCgpCZXN0IHJlZ2FyZHMsCktyenlzenRvZgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbWVk aWF0ZWsgbWFpbGluZyBsaXN0CkxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlawo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 05DBFC55178 for ; Tue, 27 Oct 2020 20:14:33 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 72A3820878 for ; Tue, 27 Oct 2020 20:14:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hcKewcgx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 72A3820878 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=GvteiN0oYqrgfiL4VVyFaJo4o3KSaInEos/up1qLuEM=; b=hcKewcgxOUC7zLcaa2htKQDcF DWjF/NqfCmvuOcvkVVcwK1kW2eWpahe+3FCxH+w0wjeLZV4lUN8wuq8RPQr8VOLV5g898oj+tWIMp NMMcDo9v5JsN0Yr2uItAvx4MYVTJkIvS4INjpqdrcfL6Xy0n2tDu58EX+y0y5FHM2XT+CWX7SmVo/ Ci8oOl91viPRePonjnDY0RCUjRoBVxC6WUusaFiCZbDNNj/eui+pcF3Iyv+FMQYt/s+7KqU/3RSHj AQQ4EdB+qAZF38ooV437jM/J2drz0x5/I0bCMNpgo7xugCMJOLhkbCeisOmRV0y0b8mT8JSq5mLSV IFTlvw5mg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kXVLF-0000MX-50; Tue, 27 Oct 2020 20:13:13 +0000 Received: from mail-ej1-f68.google.com ([209.85.218.68]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kXVLB-0000LB-7O; Tue, 27 Oct 2020 20:13:10 +0000 Received: by mail-ej1-f68.google.com with SMTP id w27so4066572ejb.3; Tue, 27 Oct 2020 13:13:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=HqJmJCDPovYzugndA/OMAMO1DYv3EvZsetrZulAFRJo=; b=dxbiXco1nsZaug7Ext+RqO5fhXwmTJ3QlfX3hONzNtByXmMsTCSlIE6d4ovwNfx48G Cl3fHls9LbMlEpzmicdlfZ/4mjevvfEMhEXxq6irzAekulvPQGFqaH1ZMPbptR/2F+p5 DLHWBHTbT/ihKLIUfwa4w/+4mlIgd9Cnf9cBxy/X+Ne6+VX1Q20vDRErjoHADYmzpCr6 IlVxDkvlzo0xwBZBDfELEJg5/RyJ79lz3TdDJH5B+QkpcXRDvsxwcSb45O0HJnukb2tv XGbyCQSjoWeic6KyWygXjQTzO4GRqvXbqvnvExnT5TRFHIQTfi3juI4SJva+Rzgku6Bg bMqg== X-Gm-Message-State: AOAM531DJiyqgjr0q2Blp0HmBhsd8ol9Tl8rICPySo1DQM9ASPtL4CV8 XtYa8vrQSmjA4y/+4PsrqPE= X-Google-Smtp-Source: ABdhPJyxK5jb4+SSk0aVsGdjabxNWjpMoCztjBqVDZCFX5oikJ0sRp4orCdpmh6hLK6tm2a1tCG9/Q== X-Received: by 2002:a17:906:1411:: with SMTP id p17mr4377404ejc.102.1603829587542; Tue, 27 Oct 2020 13:13:07 -0700 (PDT) Received: from kozik-lap ([194.230.155.184]) by smtp.googlemail.com with ESMTPSA id u24sm1548170edo.92.2020.10.27.13.13.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Oct 2020 13:13:06 -0700 (PDT) Date: Tue, 27 Oct 2020 21:13:04 +0100 From: Krzysztof Kozlowski To: Gene Chen Subject: Re: [PATCH 2/2] power: supply: mt6360_charger: add MT6360 charger support Message-ID: <20201027201304.GA142632@kozik-lap> References: <1600859910-15855-1-git-send-email-gene.chen.richtek@gmail.com> <1600859910-15855-2-git-send-email-gene.chen.richtek@gmail.com> <20201016155227.GB9890@kozik-lap> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201027_161309_320630_753BDD8D X-CRM114-Status: GOOD ( 27.78 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gene Chen , devicetree , linux-pm@vger.kernel.org, sre@kernel.org, Linux Kernel Mailing List , cy_huang@richtek.com, Rob Herring , "moderated list:ARM/Mediatek SoC support" , Matthias Brugger , linux-arm Mailing List , shufan_lee@richtek.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBPY3QgMjYsIDIwMjAgYXQgMDI6NDU6MTJQTSArMDgwMCwgR2VuZSBDaGVuIHdyb3Rl Ogo+IEtyenlzenRvZiBLb3psb3dza2kgPGtyemtAa2VybmVsLm9yZz4g5pa8IDIwMjDlubQxMOac iDE25pelIOmAseS6lCDkuIvljYgxMTo1MuWvq+mBk++8mgo+ID4KIAo+IE5vLCBJIHdpbGwgcmVt b3ZlIGl0Lgo+IAo+ID4gPiArICAgICAgICAgICAgIGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnlu YW1lKHBkZXYsIGlycV9kZXNjLT5uYW1lKTsKPiA+Cj4gPiBJbnRlcnJ1cHRzIHdlcmUgbm90IGRl c2NyaWJlZCBpbiB0aGUgYmluZGluZ3MuCj4gPgo+IAo+IEkgYWRkIHJlc291cmNlIHdoZW4gTUZE IGRyaXZlciBhZGQgc3ViLWRldmljZS4gU2hvdWxkIEkgYWRkIHNvbWV0aGluZwo+IGluIGR0LWJp bmRpbmc/CgpJIHRoaW5rIEkgbWlzc2VkIHRoZSBwYXJ0IHRoYXQgeW91IGFyZSB0YWtpbmcgaGVy ZSBpbnRlcnJ1cHRzIGZyb20KcGFyZW50IE1GRCBkZXZpY2UuIEJpbmRpbmdzIGFyZSBmaW5lIHRo ZW4uCgo+IAo+ICAgICAgICByZXQgPSBkZXZtX21mZF9hZGRfZGV2aWNlcygmY2xpZW50LT5kZXYs IFBMQVRGT1JNX0RFVklEX0FVVE8sCj4gbXQ2MzYwX2RldnMsCj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKG10NjM2MF9kZXZzKSwgTlVMTCwgMCwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ21hcF9pcnFfZ2V0X2RvbWFpbihkZGF0 YS0+aXJxX2RhdGEpKTsKPiAKPiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIG10NjM2MF9j aGdfcmVzb3VyY2VzW10gPSB7Cj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9OQU1FRChNVDYzNjBf Q0hHX1RSRUdfRVZULCAiY2hnX3RyZWdfZXZ0IiksCj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9O QU1FRChNVDYzNjBfUFdSX1JEWV9FVlQsICJwd3JfcmR5X2V2dCIpLAo+ICAgICAgICAgREVGSU5F X1JFU19JUlFfTkFNRUQoTVQ2MzYwX0NIR19CQVRTWVNVVl9FVlQsCj4gImNoZ19iYXRzeXN1dl9l dnQiKSwKPiAgICAgICAgIERFRklORV9SRVNfSVJRX05BTUVEKE1UNjM2MF9DSEdfVlNZU1VWX0VW VCwgImNoZ192c3lzdXZfZXZ0IiksCj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9OQU1FRChNVDYz NjBfQ0hHX1ZTWVNPVl9FVlQsICJjaGdfdnN5c292X2V2dCIpLAo+ICAgICAgICAgREVGSU5FX1JF U19JUlFfTkFNRUQoTVQ2MzYwX0NIR19WQkFUT1ZfRVZULCAiY2hnX3ZiYXRvdl9ldnQiKSwKPiAg ICAgICAgIERFRklORV9SRVNfSVJRX05BTUVEKE1UNjM2MF9DSEdfVkJVU09WX0VWVCwgImNoZ192 YnVzb3ZfZXZ0IiksCj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9OQU1FRChNVDYzNjBfQ0hHX0FJ Q0NNRUFTTCwgImNoZ19haWNjbWVhc2wiKSwKPiAgICAgICAgIERFRklORV9SRVNfSVJRX05BTUVE KE1UNjM2MF9XRFRNUkksICJ3ZHRtcmkiKSwKPiAgICAgICAgIERFRklORV9SRVNfSVJRX05BTUVE KE1UNjM2MF9DSEdfUkVDSEdJLCAiY2hnX3JlY2hnaSIpLAo+ICAgICAgICAgREVGSU5FX1JFU19J UlFfTkFNRUQoTVQ2MzYwX0NIR19URVJNSSwgImNoZ190ZXJtaSIpLAo+ICAgICAgICAgREVGSU5F X1JFU19JUlFfTkFNRUQoTVQ2MzYwX0NIR19JRU9DSSwgImNoZ19pZW9jaSIpLAo+ICAgICAgICAg REVGSU5FX1JFU19JUlFfTkFNRUQoTVQ2MzYwX1BVTVBYX0RPTkVJLCAicHVtcHhfZG9uZWkiKSwK PiAgICAgICAgIERFRklORV9SRVNfSVJRX05BTUVEKE1UNjM2MF9BVFRBQ0hfSSwgImF0dGFjaF9p IiksCj4gICAgICAgICBERUZJTkVfUkVTX0lSUV9OQU1FRChNVDYzNjBfQ0hSREVUX0VYVF9FVlQs ICJjaHJkZXRfZXh0X2V2dCIpLAo+IAo+ID4gPiArICAgICAgICAgICAgIGlmIChpcnEgPCAwKQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiA+ICsgICAgICAgICAgICAg cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmcGRldi0+ZGV2LCBpcnEsIE5VTEwsCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfZGVz Yy0+aXJxX2hhbmRsZXIsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJUlFGX1RSSUdHRVJfRkFMTElORywKPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycV9kZXNjLT5uYW1lLAo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fZ2V0X2RydmRh dGEocGRldikpOwo+ID4KPiA+IFdoeSB5b3UgdXNlIGhhbmRsZXIgdGhyZWFkIHBlciBlYWNoIGlu dGVycnVwdD8gVGhpcyBzaG91bGQgYmUgcmF0aGVyIG9uZQo+ID4gaGFuZGxlci4gRXNwZWNpYWxs eSB0aGF0IG1vc3Qgb2YgeW91ciBoYW5kbGVycyBkbyBub3RoaW5nLgo+ID4KPiAKPiBJIHdpbGwg cmVtb3ZlIHNlcnZlcmFsIGlycXMgd2hpY2ggaXMgZG8gbm90aGluZywgYW5kIG9ubHkga2VlcAo+ IGNocmRldF9leHQgZm9yIHBvd2VyIHJlYWR5IGFuZCBhdHRhY2hpIGZvciBiYzEyIGRvbmUuCj4g SSBhZGQgc2VydmVyYWwgcmVzb3VyY2VzIGluIE1GRCBkZXZpY2UuCj4gRG8geW91IG1lYW4gSSB1 c2UgSVJRRl9TSEFSRUQgdG8gcmVkdWNlIGlycT8KCkkgbWVhbnQgdG8gdXNlIG9uIHRocmVhZF9m biBmb3IgbW9zdCBvZiB0aGVtLiBJIHRoaW5rLCBpZiB5b3Ugd2VyZSB1c2luZwpyZWdtYXBfaXJx X2NoaXAgYW5kIHZpcnR1YWwgSVJRIGhlcmUgKHNlZSByZWdtYXBfaXJxX2dldF92aXJxKSwgeW91 CmNvdWxkIGVudGlyZWx5IHNraXAgdGhlIG5vbi1pbXBvcnRhbnQgaW50ZXJydXB0cy4gSnVzdCBp Z25vcmUgdGhlbS4KU2hvdWxkIGJlIGxlc3MgY29kZS4KCj4gCj4gPiA+ICsgICAgICAgICAgICAg aWYgKHJldCA8IDApIHsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYt PmRldiwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVlc3QgJXMgaXJx IGZhaWxcbiIsIGlycV9kZXNjLT5uYW1lKTsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJl dHVybiByZXQ7Cj4gPiA+ICsgICAgICAgICAgICAgfQo+ID4gPiArICAgICB9Cj4gPiA+ICsgICAg IHJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdHJ1Y3QgbXQ2MzYwX2ZpZWxkX2lu Zm8gewo+ID4gPiArICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cjsKPiA+ID4g KyAgICAgdTggcmVnOwo+ID4gPiArICAgICB1OCBtYXNrOwo+ID4gPiArICAgICB1OCBzaGZ0Owo+ ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIHNzaXplX3QgbXQ2MzYwX3N5c2ZzX3Nob3co c3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiArICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpidWYpOwo+ID4gPiArc3RhdGljIHNzaXplX3QgbXQ2MzYwX3N5 c2ZzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gKyAgICAgICAgICAgICBzdHJ1Y3Qg ZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwo+ ID4gPiArCj4gPiA+ICsjZGVmaW5lIE1UNjM2MF9GSUVMRF9SVyhfbmFtZSwgX3JlZywgX25iaXQp ICAgICAgICAgICAgICAgICAgXAo+ID4gPiAreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gKyAgICAgLmRldl9hdHRyID0g X19BVFRSKF9uYW1lLCAwNjY0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgIG10NjM2MF9zeXNmc19zaG93LCBtdDYzNjBfc3lzZnNfc3RvcmUpLCAg XAo+ID4gPiArICAgICAucmVnICAgID0gTVQ2MzYwX1BNVV8jI19yZWcsICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiA+ID4gKyAgICAgLm1hc2sgICA9IE1UNjM2MF9NQVNLXyMjX25iaXQs ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ICsgICAgIC5zaGZ0ICAgPSBNVDYzNjBf U0hGVF8jI19uYml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICsjZGVmaW5lIE1UNjM2MF9GSUVMRF9STyhfbmFtZSwgX3JlZywgX25iaXQpICAgICAg ICAgICAgICAgICAgXAo+ID4gPiAreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gKyAgICAgLmRldl9hdHRyID0gX19BVFRS KF9uYW1lLCAwNDQ0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICBtdDYzNjBfc3lzZnNfc2hvdywgTlVMTCksICAgICAgICAgICAgICAgXAo+ID4g PiArICAgICAucmVnICAgID0gTVQ2MzYwX1BNVV8jI19yZWcsICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPiA+ID4gKyAgICAgLm1hc2sgICA9IE1UNjM2MF9NQVNLXyMjX25iaXQsICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ICsgICAgIC5zaGZ0ICAgPSBNVDYzNjBfU0hGVF8j I19uYml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICtzdGF0aWMgc3RydWN0IG10NjM2MF9maWVsZF9pbmZvIG10NjM2MF9maWVsZF90YmxbXSA9IHsK PiA+ID4gKyAgICAgTVQ2MzYwX0ZJRUxEX1JXKGhpeiwgICAgICAgICAgICBDSEdfQ1RSTDEsICAg ICAgSElaKSwKPiA+ID4gKyAgICAgTVQ2MzYwX0ZJRUxEX1JXKHZtaXZyLCAgICAgICAgICBDSEdf Q1RSTDYsICAgICAgVk1JVlIpLAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlcoaWFpY3IsICAg ICAgICAgIENIR19DVFJMMywgICAgICBJQUlDUiksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9S VyhTWVNSRUcsICAgICAgICAgQ0hHX0NUUkwxMSwgICAgIFNZU1JFRyksCj4gPiA+ICsgICAgIE1U NjM2MF9GSUVMRF9SVyhvdGdfb2MsICAgICAgICAgQ0hHX0NUUkwxMCwgICAgIE9UR19PQyksCj4g PiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyhpY2hnLCAgICAgICAgICAgQ0hHX0NUUkwxNywgICAg IElDSEcpLAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlcoaXByZWMsICAgICAgICAgIENIR19D VFJMOCwgICAgICBJUFJFQyksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyhpZW9jLCAgICAg ICAgICAgQ0hHX0NUUkw5LCAgICAgIElFT0MpLAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlco dm9yZWcsICAgICAgICAgIENIR19DVFJMNCwgICAgICBWT1JFRyksCj4gPiA+ICsgICAgIE1UNjM2 MF9GSUVMRF9SVyhsYnAsICAgICAgICAgICAgQ0hHX0NUUkwxMCwgICAgIExCUCksCj4gPiA+ICsg ICAgIE1UNjM2MF9GSUVMRF9SVyh2cmVjLCAgICAgICAgICAgQ0hHX0NUUkwxMSwgICAgIFZSRUMp LAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlcodGUsICAgICAgICAgICAgIENIR19DVFJMMiwg ICAgICBURSksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyhjaGdfd2R0X2VuLCAgICAgQ0hH X0NUUkwxMywgICAgIENIR19XRFRfRU4pLAo+ID4gPiArICAgICBNVDYzNjBfRklFTERfUlcoY2hn X3dkdCwgICAgICAgIENIR19DVFJMMTMsICAgICBDSEdfV0RUKSwKPiA+ID4gKyAgICAgTVQ2MzYw X0ZJRUxEX1JXKHd0X2ZjLCAgICAgICAgICBDSEdfQ1RSTDEyLCAgICAgV1RfRkMpLAo+ID4gPiAr ICAgICBNVDYzNjBfRklFTERfUlcoYmF0X2NvbXAsICAgICAgIENIR19DVFJMMTgsICAgICBCQVRf Q09NUCksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyh2Y2xhbXAsICAgICAgICAgQ0hHX0NU UkwxOCwgICAgIFZDTEFNUCksCj4gPiA+ICsgICAgIE1UNjM2MF9GSUVMRF9SVyh1c2JjaGdlbiwg ICAgICAgREVWSUNFX1RZUEUsICAgIFVTQkNIR0VOKSwKPiA+ID4gKyAgICAgTVQ2MzYwX0ZJRUxE X1JXKGNoZ19lbiwgICAgICAgICBDSEdfQ1RSTDIsICAgICAgQ0hHX0VOKSwKPiA+ID4gKyAgICAg TVQ2MzYwX0ZJRUxEX1JPKGNocmRldF9leHQsICAgICBGT0RfU1RBVCwgICAgICAgQ0hSREVUX0VY VCksCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbXQ2 MzYwX2F0dHJzW0FSUkFZX1NJWkUobXQ2MzYwX2ZpZWxkX3RibCkgKyAxXTsKPiA+ID4gKwo+ID4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbXQ2MzYwX2F0dHJfZ3JvdXAg PSB7Cj4gPiA+ICsgICAgIC5hdHRycyA9IG10NjM2MF9hdHRycywKPiA+ID4gK307Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBzc2l6ZV90IG10NjM2MF9zeXNmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRl diwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gPiA+ICt7Cj4gPiA+ICsgICAgIHN0cnVjdCBtdDYz NjBfY2hnX2luZm8gKm1jaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7Cj4gPiA+ICsg ICAgIHN0cnVjdCBtdDYzNjBfZmllbGRfaW5mbyAqaW5mbyA9ICh2b2lkICopYXR0cjsKPiA+ID4g KyAgICAgdW5zaWduZWQgaW50IHJlZ3ZhbDsKPiA+ID4gKyAgICAgaW50IHJldDsKPiA+ID4gKwo+ ID4gPiArICAgICByZXQgPSByZWdtYXBfcmVhZChtY2ktPnJlZ21hcCwgaW5mby0+cmVnLCAmcmVn dmFsKTsKPiA+ID4gKyAgICAgaWYgKHJldCA8IDApCj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJu IHJldDsKPiA+ID4gKyAgICAgcmVndmFsID0gKHJlZ3ZhbCAmIGluZm8tPm1hc2spID4+IGluZm8t PnNoZnQ7Cj4gPiA+ICsgICAgIHJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJ4 XG4iLCByZWd2YWwpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3NpemVfdCBtdDYz NjBfc3lzZnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiArICAgICAgICAgICAgICAg IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBj b3VudCkKPiA+ID4gK3sKPiA+ID4gKyAgICAgc3RydWN0IG10NjM2MF9jaGdfaW5mbyAqbWNpID0g ZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKPiA+ID4gKyAgICAgc3RydWN0IG10NjM2MF9m aWVsZF9pbmZvICppbmZvID0gKHZvaWQgKilhdHRyOwo+ID4gPiArICAgICBpbnQgcmV0LCB0bXA7 Cj4gPiA+ICsKPiA+ID4gKyAgICAgaWYgKGtzdHJ0b2ludChidWYsIDEwLCAmdG1wKSA8IDApIHsK PiA+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwYXJzaW5nIG51bWJl clxuIik7Cj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsgICAgIH0K PiA+ID4gKyAgICAgcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKG1jaS0+cmVnbWFwLAo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+cmVnLCBpbmZvLT5tYXNrLCB0bXAg PDwgaW5mby0+c2hmdCk7Cj4gPiA+ICsgICAgIGlmIChyZXQgPCAwKQo+ID4gPiArICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4gPiA+ICsgICAgIHJldHVybiBjb3VudDsKPiA+ID4gK30KPiA+ID4g Kwo+ID4gPiArc3RhdGljIGludCBtdDYzNjBfc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBtdDYz NjBfY2hnX2luZm8gKm1jaSkKPiA+ID4gK3sKPiA+ID4gKyAgICAgaW50IGksIHRiX3NpemUgPSBB UlJBWV9TSVpFKG10NjM2MF9maWVsZF90YmwpOwo+ID4gPiArCj4gPiA+ICsgICAgIGZvciAoaSA9 IDA7IGkgPCB0Yl9zaXplOyBpKyspCj4gPiA+ICsgICAgICAgICAgICAgbXQ2MzYwX2F0dHJzW2ld ID0gJihtdDYzNjBfZmllbGRfdGJsW2ldLmRldl9hdHRyLmF0dHIpOwo+ID4gPiArICAgICByZXR1 cm4gZGV2bV9kZXZpY2VfYWRkX2dyb3VwKCZtY2ktPnBzeS0+ZGV2LCAmbXQ2MzYwX2F0dHJfZ3Jv dXApOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IG10NjM2MF9jaGdfaW5pdF9z ZXR0aW5nKHN0cnVjdCBtdDYzNjBfY2hnX2luZm8gKm1jaSkKPiA+ID4gK3sKPiA+ID4gKyAgICAg aW50IHJldDsKPiA+ID4gKwo+ID4gPiArICAgICAvKiBEaXNhYmxlIGJjMTIgKi8KPiA+ID4gKyAg ICAgcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKG1jaS0+cmVnbWFwLCBNVDYzNjBfUE1VX0RFVklD RV9UWVBFLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVQ2MzYwX01BU0tf VVNCQ0hHRU4sIDApOwo+ID4gPiArICAgICBpZiAocmV0IDwgMCkgewo+ID4gPiArICAgICAgICAg ICAgIGRldl9lcnIobWNpLT5kZXYsICIlczogZGlzYWJsZSBiYzEyIGZhaWxcbiIsIF9fZnVuY19f KTsKPiA+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ID4gKyAgICAgfQo+ID4gPiArICAg ICAvKiBTZXQgaW5wdXQgY3VycmVudCBsaW1pdCBzZWxlY3QgYnkgQUlDUiAqLwo+ID4gPiArICAg ICByZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMobWNpLT5yZWdtYXAsIE1UNjM2MF9QTVVfQ0hHX0NU UkwyLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVQ2MzYwX01BU0tfSUlO TE1UU0VMLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVQ2MzYwX0lJTkxN VFNFTF9BSUNSIDw8Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TVQ2MzYwX1NIRlRfSUlOTE1UU0VMKTsKPiA+ID4gKyAgICAgaWYgKHJldCA8IDApIHsKPiA+ID4g KyAgICAgICAgICAgICBkZXZfZXJyKG1jaS0+ZGV2LAo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgIiVzOiBzd2l0Y2ggaWlubG10c2VsIHRvIGFpY3IgZmFpbFxuIiwgX19mdW5jX18pOwo+ID4g PiArICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gPiArICAgICB9Cj4gPiA+ICsgICAgIHVzbGVl cF9yYW5nZSg1MDAwLCA2MDAwKTsKPiA+ID4gKyAgICAgLyogRGlzYWJsZSBpbGltICovCj4gPiA+ ICsgICAgIHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhtY2ktPnJlZ21hcCwgTVQ2MzYwX1BNVV9D SEdfQ1RSTDMsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVDYzNjBfTUFT S19JTElNX0VOLCAwKTsKPiA+ID4gKyAgICAgaWYgKHJldCA8IDApIHsKPiA+ID4gKyAgICAgICAg ICAgICBkZXZfZXJyKG1jaS0+ZGV2LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIiVzOiBz d2l0Y2ggaWlubG10c2VsIHRvIGFpY3IgZmFpbFxuIiwgX19mdW5jX18pOwo+ID4gPiArICAgICAg ICAgICAgIGdvdG8gb3V0Owo+ID4gPiArICAgICB9Cj4gPiA+ICsgICAgIC8qIEVubGFyZ2UgT1RH X09DIHRvIG1heCAzQSAqLwo+ID4gPiArICAgICByZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMobWNp LT5yZWdtYXAsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVDYzNjBfUE1V X0NIR19DVFJMMTAsIDB4MDcsIDB4MDcpOwo+ID4gPiArICAgICBpZiAocmV0IDwgMCkgewo+ID4g PiArICAgICAgICAgICAgIGRldl9lcnIobWNpLT5kZXYsCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAiJXM6IGZhbGVkIGNvbmZpZyBvdGcgb2MgdG8gbWF4aW11bVxuIiwgX19mdW5jX18pOwo+ ID4gPiArICAgICB9Cj4gPiA+ICtvdXQ6Cj4gPiA+ICsgICAgIHJldHVybiByZXQ7Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB1MzIgbXQ2MzYwX3Zpbm92cF90cmFuc190b19zZWwodTMy IHZhbCkKPiA+ID4gK3sKPiA+ID4gKyAgICAgdTMyIHZpbm92cF90YmxbXSA9IHsgNTUwMDAwMCwg NjUwMDAwMCwgMTEwMDAwMDAsIDE0NTAwMDAwIH07Cj4gPiA+ICsgICAgIGludCBpOwo+ID4gPiAr Cj4gPiA+ICsgICAgIC8qIFNlbGVjdCB0aGUgc21hbGxlciBhbmQgZXF1YWwgc3VwcG9ydGVkIHZh bHVlICovCj4gPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpbm92cF90Ymwp LTE7IGkrKykgewo+ID4gPiArICAgICAgICAgICAgIGlmICh2YWwgPCB2aW5vdnBfdGJsW2krMV0p Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKyAgICAgfQo+ID4gPiAr ICAgICByZXR1cm4gaTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHN0cnVjdCBtdDYz NjBfY2hnX3BsYXRmb3JtX2RhdGEgKm10NjM2MF9wYXJzZV9wZGF0YSgKPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gPiA+ICt7Cj4gPiA+ICsgICAgIHN0cnVjdCBtdDYzNjBfY2hnX3BsYXRm b3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKPiA+ID4gKyAg ICAgc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwo+ID4gPiArICAg ICBpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsgICAgIHBkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2 LT5kZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKyAgICAgaWYgKCFwZGF0 YSkKPiA+ID4gKyAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gKyAg ICAgbWVtY3B5KHBkYXRhLCAmZGVmX3BsYXRmb3JtX2RhdGEsIHNpemVvZigqcGRhdGEpKTsKPiA+ Cj4gPiBVc2Uga21lbWR1cCBvciBzb21ldGhpbmcgc2ltaWxhci4KPiA+Cj4gCj4gQUNLCj4gCj4g PiA+ICsgICAgIHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAidmlub3ZwIiwgJnBkYXRh LT52aW5vdnApOwo+ID4gPiArICAgICBpZiAocmV0KSB7Cj4gPiA+ICsgICAgICAgICAgICAgZGV2 X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBhcnNlIHZpbm92cCBpbiBEVFxuIik7Cj4gPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ID4gKyAgICAgfQo+ID4gPiAr ICAgICByZXR1cm4gcGRhdGE7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgbXQ2 MzYwX2FwcGx5X3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ICt7Cj4g PiA+ICsgICAgIHN0cnVjdCBtdDYzNjBfY2hnX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dl dF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKPiA+ID4gKyAgICAgc3RydWN0IG10NjM2MF9jaGdfaW5m byAqbWNpID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwo+ID4gPiArICAgICBpbnQgcmV0 Owo+ID4gPiArICAgICB1MzIgc2VsOwo+ID4gPiArCj4gPiA+ICsgICAgIHNlbCA9IG10NjM2MF92 aW5vdnBfdHJhbnNfdG9fc2VsKHBkYXRhLT52aW5vdnApOwo+ID4gPiArICAgICByZXQgPSByZWdt YXBfdXBkYXRlX2JpdHMobWNpLT5yZWdtYXAsIE1UNjM2MF9QTVVfQ0hHX0NUUkwxOSwKPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UNjM2MF9NQVNLX1ZJTk9WUCwgc2VsIDw8 IE1UNjM2MF9TSEZUX1ZJTk9WUCk7Cj4gPiA+ICsgICAgIGlmIChyZXQpCj4gPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIHJldDsKPiA+ID4gKyAgICAgcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBpbnQgbXQ2MzYwX2NoYXJnZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPiA+ID4gK3sKPiA+ID4gKyAgICAgc3RydWN0IG10NjM2MF9jaGdfcGxhdGZv cm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwo+ID4gPiArICAg ICBzdHJ1Y3QgbXQ2MzYwX2NoZ19pbmZvICptY2k7Cj4gPiA+ICsgICAgIHN0cnVjdCBwb3dlcl9z dXBwbHlfY29uZmlnIGNoYXJnZXJfY2ZnID0ge307Cj4gPiA+ICsgICAgIHN0cnVjdCByZWd1bGF0 b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKPiA+ID4gKyAgICAgaW50IHJldDsKPiA+ID4gKwo+ID4g PiArICAgICBtY2kgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCptY2kpLCBHRlBf S0VSTkVMKTsKPiA+ID4gKyAgICAgaWYgKCFtY2kpCj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FTk9NRU07Cj4gPiA+ICsKPiA+ID4gKyAgICAgcGRhdGEgPSBtdDYzNjBfcGFyc2VfcGRhdGEo cGRldik7Cj4gPiA+ICsgICAgIGlmIChJU19FUlJfT1JfTlVMTChwZGF0YSkpCj4gPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIFBUUl9FUlIocGRhdGEpOwo+ID4gPiArCj4gPiA+ICsgICAgIHBkZXYt PmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7Cj4gPiA+ICsKPiA+ID4gKyAgICAgbWNpLT5kZXYg PSAmcGRldi0+ZGV2Owo+ID4gPiArICAgICBtdXRleF9pbml0KCZtY2ktPmNoZ2RldF9sb2NrKTsK PiA+ID4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNpKTsKPiA+ID4gKyAgICAg SU5JVF9XT1JLKCZtY2ktPmNocmRldF93b3JrLCAmbXQ2MzYwX2NocmRldF93b3JrKTsKPiA+ID4g Kwo+ID4gPiArICAgICBtY2ktPnJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKHBkZXYtPmRldi5wYXJl bnQsIE5VTEwpOwo+ID4gPiArICAgICBpZiAoIW1jaS0+cmVnbWFwKSB7Cj4gPiA+ICsgICAgICAg ICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBwYXJlbnQgcmVnbWFwXG4i KTsKPiA+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiA+ID4gKyAgICAgfQo+ID4g PiArCj4gPiA+ICsgICAgIHJldCA9IG10NjM2MF9hcHBseV9wZGF0YShwZGV2KTsKPiA+ID4gKyAg ICAgaWYgKHJldCkgewo+ID4gPiArICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIkZh aWxlZCB0byBhcHBseSBwZGF0YVxuIik7Cj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsK PiA+ID4gKyAgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgIG1jaS0+ZWRldiA9IGRldm1fZXh0Y29u X2Rldl9hbGxvY2F0ZSgmcGRldi0+ZGV2LCBtdDYzNjBfZXh0Y29uX2NhYmxlKTsKPiA+ID4gKyAg ICAgaWYgKElTX0VSUihtY2ktPmVkZXYpKSB7Cj4gPiA+ICsgICAgICAgICAgICAgZGV2X2Vycigm cGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZXh0Y29uXG4iKTsKPiA+ ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+ID4gKyAgICAgfQo+ID4gPiArCj4g PiA+ICsgICAgIHJldCA9IGRldm1fZXh0Y29uX2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCBtY2kt PmVkZXYpOwo+ID4gPiArICAgICBpZiAocmV0KSB7Cj4gPiA+ICsgICAgICAgICAgICAgZGV2X2Vy cigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGV4dGNvbiBkZXZcbiIpOwo+ID4gPiAr ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiA+ICsgICAgIH0KPiA+ID4gKwo+ID4gPiArICAg ICBtZW1jcHkoJm1jaS0+cHN5X2Rlc2MsICZtdDYzNjBfY2hhcmdlcl9kZXNjLCBzaXplb2YobWNp LT5wc3lfZGVzYykpOwo+ID4gPiArICAgICBtY2ktPnBzeV9kZXNjLm5hbWUgPSBkZXZfbmFtZSgm cGRldi0+ZGV2KTsKPiA+ID4gKyAgICAgY2hhcmdlcl9jZmcuZHJ2X2RhdGEgPSBtY2k7Cj4gPiA+ ICsgICAgIGNoYXJnZXJfY2ZnLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKPiA+ID4gKyAg ICAgY2hhcmdlcl9jZmcuc3VwcGxpZWRfdG8gPSBtdDYzNjBfY2hhcmdlcl9zdXBwbGllZF90bzsK PiA+ID4gKyAgICAgY2hhcmdlcl9jZmcubnVtX3N1cHBsaWNhbnRzID0gQVJSQVlfU0laRShtdDYz NjBfY2hhcmdlcl9zdXBwbGllZF90byk7Cj4gPiA+ICsgICAgIG1jaS0+cHN5ID0gZGV2bV9wb3dl cl9zdXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmbWNpLT5wc3lfZGVzYywgJmNoYXJnZXJfY2ZnKTsKPiA+ ID4gKyAgICAgaWYgKElTX0VSUihtY2ktPnBzeSkpIHsKPiA+ID4gKyAgICAgICAgICAgICBkZXZf ZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcG93ZXIgc3VwcGx5IGRldlxuIik7 Cj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIobWNpLT5wc3kpOwo+ID4gPiArICAg ICB9Cj4gPiA+ICsKPiA+ID4gKyAgICAgcmV0ID0gbXQ2MzYwX2NoZ19pbml0X3NldHRpbmcobWNp KTsKPiA+ID4gKyAgICAgaWYgKHJldCkgewo+ID4gPiArICAgICAgICAgICAgIGRldl9lcnIoJnBk ZXYtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsIHNldHRpbmdcbiIpOwo+ID4gPiArICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4gPiA+ICsgICAgIH0KPiA+ID4gKwo+ID4gPiArICAgICBzY2hlZHVs ZV93b3JrKCZtY2ktPmNocmRldF93b3JrKTsKPiA+ID4gKwo+ID4gPiArICAgICByZXQgPSBtdDYz NjBfY2hnX2lycV9yZWdpc3RlcihwZGV2KTsKPiA+ID4gKyAgICAgaWYgKHJldCkgewo+ID4gPiAr ICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBpcnFz XG4iKTsKPiA+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gPiArICAgICB9Cj4gPiA+ ICsKPiA+ID4gKyAgICAgY29uZmlnLmRldiA9ICZwZGV2LT5kZXY7Cj4gPiA+ICsgICAgIGNvbmZp Zy5yZWdtYXAgPSBtY2ktPnJlZ21hcDsKPiA+ID4gKyAgICAgbWNpLT5vdGdfcmRldiA9IGRldm1f cmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZtdDYzNjBfb3RnX3JkZXNjLAo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmZpZyk7Cj4g PiA+ICsgICAgIGlmIChJU19FUlIobWNpLT5vdGdfcmRldikpCj4gPiA+ICsgICAgICAgICAgICAg cmV0dXJuIFBUUl9FUlIobWNpLT5vdGdfcmRldik7Cj4gPiA+ICsKPiA+ID4gKyAgICAgcmV0ID0g bXQ2MzYwX3N5c2ZzX2NyZWF0ZV9ncm91cChtY2kpOwo+ID4gPiArICAgICBpZiAocmV0KSB7Cj4g PiA+ICsgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LAo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgIiVzOiBjcmVhdGUgc3lzZnMgYXR0cnMgZmFpbFxuIiwgX19mdW5jX18pOwo+ID4g PiArICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiA+ICsgICAgIH0KPiA+ID4gKwo+ID4gPiAr ICAgICByZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbXQ2MzYwX2NoYXJnZXJfb2ZfaWRbXSA9IHsK PiA+ID4gKyAgICAgeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDYzNjAtY2hnIiwgfSwKPiA+ ID4gKyAgICAge30sCj4gPiA+ICt9Owo+ID4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ2 MzYwX2NoYXJnZXJfb2ZfaWQpOwo+ID4gPiArCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBs YXRmb3JtX2RldmljZV9pZCBtdDYzNjBfY2hhcmdlcl9pZFtdID0gewo+ID4gPiArICAgICB7ICJt dDYzNjAtY2hnIiwgMCB9LAo+ID4gPiArICAgICB7fSwKPiA+ID4gK307Cj4gPiA+ICtNT0RVTEVf REVWSUNFX1RBQkxFKHBsYXRmb3JtLCBtdDYzNjBfY2hhcmdlcl9pZCk7Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10NjM2MF9jaGFyZ2VyX2RyaXZlciA9IHsK PiA+ID4gKyAgICAgLmRyaXZlciA9IHsKPiA+ID4gKyAgICAgICAgICAgICAubmFtZSA9ICJtdDYz NjAtY2hnIiwKPiA+ID4gKyAgICAgICAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKPiA+Cj4g PiBOb3QgbmVlZGVkLiBZb3UgZGlkIG5vdCBydW4gY29jY2luZWxsZSwgcmlnaHQ/Cj4gPgo+ID4g PiArICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihtdDYzNjBfY2hh cmdlcl9vZl9pZCksCj4gPiA+ICsgICAgIH0sCj4gPiA+ICsgICAgIC5wcm9iZSA9IG10NjM2MF9j aGFyZ2VyX3Byb2JlLAo+ID4gPiArICAgICAuaWRfdGFibGUgPSBtdDYzNjBfY2hhcmdlcl9pZCwK PiA+ID4gK307Cj4gPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10NjM2MF9jaGFyZ2VyX2Ry aXZlcik7Cj4gPiA+ICsKPiA+ID4gK01PRFVMRV9BVVRIT1IoIkNZX0h1YW5nIDxjeV9odWFuZ0By aWNodGVrLmNvbT4iKTsKPiA+ID4gK01PRFVMRV9ERVNDUklQVElPTigiTVQ2MzYwIENoYXJnZXIg RHJpdmVyIik7Cj4gPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gPiA+ICtNT0RVTEVfVkVS U0lPTigiMS4wLjAiKTsKPiA+Cj4gPiBTa2lwIHZlcnNpb24uCj4gPgo+ID4KPiAKPiBBQ0sKPiAK PiA+IEFsbCB0aGVzZSBjb21tZW50cyB3ZXJlIGFmdGVyIGxvb2tpbmcgYnJpZWZseSAtIEkgZGlk IG5vdCBwZXJmb3JtIGEKPiA+IHRob3JvdWdoIHJldmlldy4gIEkgYW0gc3VycHJpc2VkIHRoYXQg eW91IGNvbWJpbmVkIHJlZ3VsYXRvciBhbmQgY2hhcmdlcgo+ID4gZHJpdmVyIGluIG9uZS4gSXQg aXMgZG9hYmxlIGJ1dCBtYWtlcyBkcml2ZXIgYmlnZ2VyIGFuZCBtb3JlIGRpZmZpY3VsdAo+ID4g dG8gbWFpbnRhaW4uIENvbnNpZGVyIHNwbGl0dGluZyB0aGVtLgo+ID4KPiAKPiBNVDYzNjAgY2hh cmdlciBpcyBzd2l0Y2hpbmcgY2hhcmdlciwgQ2FuIEkga2VlcCByZWd1bGF0b3IgZm9yIGJvb3N0 Cj4gT1RHIGxpa2UgYnEyNDE5MD8KCkl0J3Mgb2suCgpCZXN0IHJlZ2FyZHMsCktyenlzenRvZgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=