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=-12.9 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FSL_HELO_FAKE,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham 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 04ECBC07E95 for ; Fri, 16 Jul 2021 07:51:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D6A72613E9 for ; Fri, 16 Jul 2021 07:51:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231758AbhGPHyS (ORCPT ); Fri, 16 Jul 2021 03:54:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231454AbhGPHyS (ORCPT ); Fri, 16 Jul 2021 03:54:18 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 98F3AC06175F for ; Fri, 16 Jul 2021 00:51:23 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id r11so10974776wro.9 for ; Fri, 16 Jul 2021 00:51:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=75hkuBoWS0vHJJzS2VgnET8y1i2k9hSa3LBfcENdXNE=; b=IACJF3oamyYJKyHVKKuIo/tOKQo2eNT4+6VJNapd37DO/T4wzAQhnnf5kjrlzAGbpl ItKOQHOoLV7ABATBQpiU/J7lR0nhpce41v0Fi/5sQ2wIdLv2PvSP9L2j3jIvn95Qu6by 1fq1QfPpY4nmw+YgC5T9D5Aq3NW9MSi79I3upyj2Rmopj/ItQ8RJOLKa51lf6rMIfw5r 465pcxcGsY5RIlOphtu5k/k0+2C4w3k2hNZFqryuCaYFm3xwFP7oftE/k3Uj7yfkDP7v uwdWU2jL8gL0Xra4JG7mqAgVrhiVZLEUN2CSgJJnZQ/NEXFfTnC/oI63EQboC/uCRaDh XYJw== 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=75hkuBoWS0vHJJzS2VgnET8y1i2k9hSa3LBfcENdXNE=; b=KsA0a98p5sRKF7gny7i4So1OK/CvA9AxwkdcBp6QhBUUrHbi8lxF4ZTiBewWyaoN/B ePTYKY7byWSDuPP3plQ7NNzRl8EngJmusdVizKtubcxLKvrVruJln+kOtr7BhGYERGD2 8wBNpkR8YKtGogZc2JMXvkE4IUSTIp6wLHRodLzxDdK0+HYLOn0uW7acSg2kwTu4OJJT /3xd3gypW7JMUolOkBI7LVEiZXg62PRBBaCblFCLnDo44rRjSkeextCpeiM7/FGE85dD gZAJH885Yiftu4mLiZ5UfUg4ka5YpW5UzzprQ1ER6fArX5XzIxl2gzadSR97BDpYp+RX nhUQ== X-Gm-Message-State: AOAM5334Bm+UqbnptrEAOC5slhN1UzpYxitwmUukCR1NEv9JJSIQ6Ss1 sguiyDHzD5TcyROrYmZkltTG6Q== X-Google-Smtp-Source: ABdhPJyYkCv/M75rt2/Jdzn8hQJLR21YJoYAPwfbuJZyNViAqFSzHnmN2vHdylezaNC5LUwoKRaQWw== X-Received: by 2002:a5d:634e:: with SMTP id b14mr10240122wrw.81.1626421882154; Fri, 16 Jul 2021 00:51:22 -0700 (PDT) Received: from google.com ([31.124.24.141]) by smtp.gmail.com with ESMTPSA id f130sm8758156wmf.23.2021.07.16.00.51.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jul 2021 00:51:21 -0700 (PDT) Date: Fri, 16 Jul 2021 08:51:19 +0100 From: Lee Jones To: Linus Walleij Cc: linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Dmitry Eremin-Solenikov , Dirk Opfer , Robert Jarzmik , Daniel Mack , Haojian Zhuang , Sebastian Reichel , Liam Girdwood , Mark Brown Subject: Re: [PATCH] ARM/pxa/mfd/power/sound: Switch Tosa to GPIO descriptors Message-ID: References: <20210715151625.394960-1-linus.walleij@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20210715151625.394960-1-linus.walleij@linaro.org> Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org On Thu, 15 Jul 2021, Linus Walleij wrote: > The Tosa device (Sharp SL-6000) has a mishmash driver set-up > for the Toshiba TC6393xb MFD that includes a battery charger > and touchscreen and has some kind of relationship to the SoC > sound driver for the AC97 codec. Other devices define a chip > like this but seem only half-implemented, not really handling > battery charging etc. > > This patch switches the Toshiba MFD device to provide GPIO > descriptors to the battery charger and SoC codec. As a result > some descriptors need to be moved out of the Tosa boardfile > and new one added: all SoC GPIO resources to these drivers > now comes from the main boardfile, while the MFD provide > GPIOs for its portions. > > As a result we can request one GPIO from our own GPIO chip > and drop two hairy callbacks into the board file. > > This platform badly needs to have its drivers split up and > converted to device tree probing to handle this quite complex > relationship in an orderly manner. I just do my best in solving > the GPIO descriptor part of the puzzle. Please don't ask me > to fix everything that is wrong with these driver to todays > standards, I am just trying to fix one aspect. I do try to > use modern devres resource management and handle deferred > probe using new functions where appropriate. > > Cc: Dmitry Eremin-Solenikov > Cc: Dirk Opfer > Cc: Robert Jarzmik > Cc: Daniel Mack > Cc: Haojian Zhuang > Cc: Lee Jones > Cc: Sebastian Reichel > Cc: Liam Girdwood > Cc: Mark Brown > Signed-off-by: Linus Walleij > --- > Dmitry/Dirk: it'd be great if you could test this patch on > the Tosa and try to help me iron out any bugs. > > Merging strategy: please provide ACKs and I will attempt > to merge this through the SoC tree. > --- > arch/arm/mach-pxa/eseries.c | 2 - > arch/arm/mach-pxa/include/mach/tosa.h | 18 --- > arch/arm/mach-pxa/tosa.c | 68 +++------- > drivers/mfd/tc6393xb.c | 147 ++++++++++++++++------ > drivers/power/supply/tosa_battery.c | 171 ++++++++++++++++---------- > include/linux/mfd/tc6393xb.h | 1 - > sound/soc/pxa/tosa.c | 20 ++- > 7 files changed, 246 insertions(+), 181 deletions(-) [...] > diff --git a/drivers/mfd/tc6393xb.c b/drivers/mfd/tc6393xb.c > index 3d5b14c60e20..72ac471cb0f5 100644 > --- a/drivers/mfd/tc6393xb.c > +++ b/drivers/mfd/tc6393xb.c > @@ -22,6 +22,8 @@ > #include > #include > #include > +#include /* Provides GPIO lines to children */ > +#include /* Requesting own GPIOs */ Are these comments really necessary? > #include > > #define SCR_REVID 0x08 /* b Revision ID */ > @@ -87,8 +89,10 @@ > > struct tc6393xb { > void __iomem *scr; > + struct device *dev; > > struct gpio_chip gpio; > + struct gpio_desc *vcc_on; > > struct clk *clk; /* 3,6 Mhz */ > > @@ -497,17 +501,110 @@ static int tc6393xb_gpio_direction_output(struct gpio_chip *chip, > return 0; > } > > -static int tc6393xb_register_gpio(struct tc6393xb *tc6393xb, int gpio_base) > +/* > + * TC6393XB GPIOs as used on TOSA, the only user of this chip. If you add more Missing an "are" for clarity? > + * platforms using this chip, rewrite things to use device tree and register GPIO Not sure we should be dictating extension methods in this way. What if DT is deprecated by the time this is expanded? > + * resources there. > + */ > +#define TOSA_GC_NAME "tc6393xb" Please use the name string in-place. > +#define TOSA_GPIO_TG_ON 0 > +#define TOSA_GPIO_L_MUTE 1 > +#define TOSA_GPIO_BL_C20MA 3 > +#define TOSA_GPIO_CARD_VCC_ON 4 > +#define TOSA_GPIO_CHARGE_OFF 6 > +#define TOSA_GPIO_CHARGE_OFF_JC 7 > +#define TOSA_GPIO_BAT0_V_ON 9 > +#define TOSA_GPIO_BAT1_V_ON 10 > +#define TOSA_GPIO_BU_CHRG_ON 11 > +#define TOSA_GPIO_BAT_SW_ON 12 > +#define TOSA_GPIO_BAT0_TH_ON 14 > +#define TOSA_GPIO_BAT1_TH_ON 15 Okay, I have to ask - what are 5, 8 and 13? > +static struct gpiod_lookup_table tosa_lcd_gpio_lookup = { > + .dev_id = "spi2.0", > + .table = { > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_TG_ON, "tg #pwr", GPIO_ACTIVE_HIGH), > + { }, > + }, > +}; > + > +static struct gpiod_lookup_table tosa_lcd_bl_gpio_lookup = { > + .dev_id = "i2c-tosa-bl", > + .table = { > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BL_C20MA, "backlight", GPIO_ACTIVE_HIGH), > + { }, > + }, > +}; > + > +static struct gpiod_lookup_table tosa_audio_gpio_lookup = { > + .dev_id = "tosa-audio", > + .table = { > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_L_MUTE, NULL, GPIO_ACTIVE_HIGH), > + { }, > + }, > +}; Are these structures going to be peppered all over the kernel now? Maybe a helper can be added to make these single line entries one line each? > +static struct gpiod_lookup_table tosa_battery_gpio_lookup = { > + .dev_id = "wm97xx-battery", > + .table = { > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_CHARGE_OFF, > + "main charge off", GPIO_ACTIVE_HIGH), > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_CHARGE_OFF_JC, > + "jacket charge off", GPIO_ACTIVE_HIGH), > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT0_V_ON, > + "main battery", GPIO_ACTIVE_HIGH), > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT1_V_ON, > + "jacket battery", GPIO_ACTIVE_HIGH), > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BU_CHRG_ON, > + "backup battery", GPIO_ACTIVE_HIGH), > + /* BAT1 and BAT0 thermistors appear to be swapped */ > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT1_TH_ON, > + "main battery temp", GPIO_ACTIVE_HIGH), > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT0_TH_ON, > + "jacket battery temp", GPIO_ACTIVE_HIGH), > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT_SW_ON, > + "battery switch", GPIO_ACTIVE_HIGH), These are soooo close to being <100 chars. What does Checkpatch currently warn on? Is it 100 or 120? > + { }, > + }, > +}; > + > +static struct gpiod_lookup_table *tc6393xb_gpio_lookups[] = { > + &tosa_lcd_gpio_lookup, > + &tosa_lcd_bl_gpio_lookup, > + &tosa_audio_gpio_lookup, > + &tosa_battery_gpio_lookup, > +}; > + > +static int tc6393xb_register_gpio(struct tc6393xb *tc6393xb) > { > - tc6393xb->gpio.label = "tc6393xb"; > - tc6393xb->gpio.base = gpio_base; > - tc6393xb->gpio.ngpio = 16; > - tc6393xb->gpio.set = tc6393xb_gpio_set; > - tc6393xb->gpio.get = tc6393xb_gpio_get; > - tc6393xb->gpio.direction_input = tc6393xb_gpio_direction_input; > - tc6393xb->gpio.direction_output = tc6393xb_gpio_direction_output; > - > - return gpiochip_add_data(&tc6393xb->gpio, tc6393xb); > + struct gpio_chip *gc = &tc6393xb->gpio; > + struct device *dev = tc6393xb->dev; > + int ret; > + > + gc->label = TOSA_GC_NAME; > + gc->base = -1; /* Dynamic allocation */ Global define? > + gc->ngpio = 16; > + gc->set = tc6393xb_gpio_set; > + gc->get = tc6393xb_gpio_get; > + gc->direction_input = tc6393xb_gpio_direction_input; > + gc->direction_output = tc6393xb_gpio_direction_output; > + > + ret = devm_gpiochip_add_data(dev, gc, tc6393xb); > + if (ret) > + return dev_err_probe(dev, ret, "failed to add GPIO chip\n"); > + > + /* Register descriptor look-ups for consumers */ > + gpiod_add_lookup_tables(tc6393xb_gpio_lookups, ARRAY_SIZE(tc6393xb_gpio_lookups)); > + > + /* Request some of our own GPIOs */ > + tc6393xb->vcc_on = gpiochip_request_own_desc(gc, TOSA_GPIO_CARD_VCC_ON, "VCC ON", > + GPIO_ACTIVE_HIGH, GPIOD_OUT_HIGH); > + if (IS_ERR(tc6393xb->vcc_on)) > + return dev_err_probe(dev, PTR_ERR(tc6393xb->vcc_on), > + "failed to request VCC ON GPIO\n"); > + So much more code to do the same thing? > + return 0; > } > > /*--------------------------------------------------------------------------*/ > @@ -617,6 +714,7 @@ static int tc6393xb_probe(struct platform_device *dev) > ret = -ENOMEM; > goto err_kzalloc; > } > + tc6393xb->dev = &dev->dev; That confused me at first. Please consider changing the platform_device to pdev (separately). > raw_spin_lock_init(&tc6393xb->lock); > > @@ -676,22 +774,12 @@ static int tc6393xb_probe(struct platform_device *dev) > tmio_ioread8(tc6393xb->scr + SCR_REVID), > (unsigned long) iomem->start, tc6393xb->irq); > > - tc6393xb->gpio.base = -1; > - > - if (tcpd->gpio_base >= 0) { > - ret = tc6393xb_register_gpio(tc6393xb, tcpd->gpio_base); > - if (ret) > - goto err_gpio_add; > - } > + ret = tc6393xb_register_gpio(tc6393xb); > + if (ret) > + goto err_gpio_add; > > tc6393xb_attach_irq(dev); > > - if (tcpd->setup) { > - ret = tcpd->setup(dev); > - if (ret) > - goto err_setup; > - } > - > tc6393xb_cells[TC6393XB_CELL_NAND].platform_data = tcpd->nand_data; > tc6393xb_cells[TC6393XB_CELL_NAND].pdata_size = > sizeof(*tcpd->nand_data); > @@ -705,15 +793,8 @@ static int tc6393xb_probe(struct platform_device *dev) > if (!ret) > return 0; > > - if (tcpd->teardown) > - tcpd->teardown(dev); > - > -err_setup: > tc6393xb_detach_irq(dev); > - > err_gpio_add: > - if (tc6393xb->gpio.base != -1) > - gpiochip_remove(&tc6393xb->gpio); > tcpd->disable(dev); > err_enable: > clk_disable_unprepare(tc6393xb->clk); > @@ -738,14 +819,8 @@ static int tc6393xb_remove(struct platform_device *dev) > > mfd_remove_devices(&dev->dev); > > - if (tcpd->teardown) > - tcpd->teardown(dev); > - > tc6393xb_detach_irq(dev); > > - if (tc6393xb->gpio.base != -1) > - gpiochip_remove(&tc6393xb->gpio); > - Taking away all of these lines is nice. > ret = tcpd->disable(dev); > clk_disable_unprepare(tc6393xb->clk); > iounmap(tc6393xb->scr); -- Lee Jones [李琼斯] Senior Technical Lead - Developer Services Linaro.org │ Open source software for Arm SoCs Follow Linaro: Facebook | Twitter | Blog 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=-11.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,FSL_HELO_FAKE,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham 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 09862C12002 for ; Fri, 16 Jul 2021 07:53:23 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 C173F613CF for ; Fri, 16 Jul 2021 07:53:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C173F613CF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.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=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc: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=ljWIiDo1D7hZwnoR0s3xkkFYTGTOOoA9vF8+eEEzNE0=; b=EY5EiHWFQn8EZt AEkxZ7PCp23yo6M69n6hsU78KA2ua5u2iVriIIpOi7KMeQXiiDyJcbr+BHMcc6n1IegNQUeizaKjr N9zG0usbWqnz+68OGml4s8jI8y41gU5wrpPcJMdO29D6b7N+pfg5LpUXQYekB3rO5KuHJBx0sp8Yw qfjJAQgApy9YIe0NJSgvZJGhtquG+4FCu2y2bg3XGd7eM31QXh1ct+wxg9imZFWSuuIqDJktYjv5o ucXZkB3yFFvrfaxGpEWu/XcPnjEXGWtfh8zaAnZHocdJ/yUdTA/lvQ+/p1Kp0zZ7+GKJx5j30XY7O GEOZC07eGV06Z5Z3EJeQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m4Id7-003ayt-8a; Fri, 16 Jul 2021 07:51:29 +0000 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m4Id2-003axO-3e for linux-arm-kernel@lists.infradead.org; Fri, 16 Jul 2021 07:51:26 +0000 Received: by mail-wr1-x431.google.com with SMTP id l7so10981821wrv.7 for ; Fri, 16 Jul 2021 00:51:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=75hkuBoWS0vHJJzS2VgnET8y1i2k9hSa3LBfcENdXNE=; b=IACJF3oamyYJKyHVKKuIo/tOKQo2eNT4+6VJNapd37DO/T4wzAQhnnf5kjrlzAGbpl ItKOQHOoLV7ABATBQpiU/J7lR0nhpce41v0Fi/5sQ2wIdLv2PvSP9L2j3jIvn95Qu6by 1fq1QfPpY4nmw+YgC5T9D5Aq3NW9MSi79I3upyj2Rmopj/ItQ8RJOLKa51lf6rMIfw5r 465pcxcGsY5RIlOphtu5k/k0+2C4w3k2hNZFqryuCaYFm3xwFP7oftE/k3Uj7yfkDP7v uwdWU2jL8gL0Xra4JG7mqAgVrhiVZLEUN2CSgJJnZQ/NEXFfTnC/oI63EQboC/uCRaDh XYJw== 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=75hkuBoWS0vHJJzS2VgnET8y1i2k9hSa3LBfcENdXNE=; b=KDSU22jYccOGjdEYugYW92a1ki4gMDed32h/R11ytGi9P8PXoSQS3k5i7OMMNVY2AJ 7wi6DJ6fAeCHlL2t2jCJ9JveWKxHxjk6i1LOvHSTk8pl6X/eFIoH3GOiWzDW24xrqBLL scAZq8wzwRpnzZAnmlS047bK1eCpX0cNosS8OrEWG8Z+XjfdpegXSR8jtOtiuuuFReXu GtwahHOP/aRmOUQQMF8j4+Qqf3B/25+vdMUbwOv1q6pXTFPEDTIleqZ2CjeGtddEkBdY qZylwqrpnncC+idliprNicdDr7IRHAl/vJ57umGUG0aZbx/iyS4roBjqceeImd9s68BD lHHA== X-Gm-Message-State: AOAM531qLOz7FDsxqtoORnZPc0bQsjqc2hjDdTHoIqEqE0bAsnfmFg8N sVTomYUzPSC1t1Sgvds691QsrQ== X-Google-Smtp-Source: ABdhPJyYkCv/M75rt2/Jdzn8hQJLR21YJoYAPwfbuJZyNViAqFSzHnmN2vHdylezaNC5LUwoKRaQWw== X-Received: by 2002:a5d:634e:: with SMTP id b14mr10240122wrw.81.1626421882154; Fri, 16 Jul 2021 00:51:22 -0700 (PDT) Received: from google.com ([31.124.24.141]) by smtp.gmail.com with ESMTPSA id f130sm8758156wmf.23.2021.07.16.00.51.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jul 2021 00:51:21 -0700 (PDT) Date: Fri, 16 Jul 2021 08:51:19 +0100 From: Lee Jones To: Linus Walleij Cc: linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Dmitry Eremin-Solenikov , Dirk Opfer , Robert Jarzmik , Daniel Mack , Haojian Zhuang , Sebastian Reichel , Liam Girdwood , Mark Brown Subject: Re: [PATCH] ARM/pxa/mfd/power/sound: Switch Tosa to GPIO descriptors Message-ID: References: <20210715151625.394960-1-linus.walleij@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20210715151625.394960-1-linus.walleij@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210716_005124_218517_4B31B1AD X-CRM114-Status: GOOD ( 47.67 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 T24gVGh1LCAxNSBKdWwgMjAyMSwgTGludXMgV2FsbGVpaiB3cm90ZToKCj4gVGhlIFRvc2EgZGV2 aWNlIChTaGFycCBTTC02MDAwKSBoYXMgYSBtaXNobWFzaCBkcml2ZXIgc2V0LXVwCj4gZm9yIHRo ZSBUb3NoaWJhIFRDNjM5M3hiIE1GRCB0aGF0IGluY2x1ZGVzIGEgYmF0dGVyeSBjaGFyZ2VyCj4g YW5kIHRvdWNoc2NyZWVuIGFuZCBoYXMgc29tZSBraW5kIG9mIHJlbGF0aW9uc2hpcCB0byB0aGUg U29DCj4gc291bmQgZHJpdmVyIGZvciB0aGUgQUM5NyBjb2RlYy4gT3RoZXIgZGV2aWNlcyBkZWZp bmUgYSBjaGlwCj4gbGlrZSB0aGlzIGJ1dCBzZWVtIG9ubHkgaGFsZi1pbXBsZW1lbnRlZCwgbm90 IHJlYWxseSBoYW5kbGluZwo+IGJhdHRlcnkgY2hhcmdpbmcgZXRjLgo+IAo+IFRoaXMgcGF0Y2gg c3dpdGNoZXMgdGhlIFRvc2hpYmEgTUZEIGRldmljZSB0byBwcm92aWRlIEdQSU8KPiBkZXNjcmlw dG9ycyB0byB0aGUgYmF0dGVyeSBjaGFyZ2VyIGFuZCBTb0MgY29kZWMuIEFzIGEgcmVzdWx0Cj4g c29tZSBkZXNjcmlwdG9ycyBuZWVkIHRvIGJlIG1vdmVkIG91dCBvZiB0aGUgVG9zYSBib2FyZGZp bGUKPiBhbmQgbmV3IG9uZSBhZGRlZDogYWxsIFNvQyBHUElPIHJlc291cmNlcyB0byB0aGVzZSBk cml2ZXJzCj4gbm93IGNvbWVzIGZyb20gdGhlIG1haW4gYm9hcmRmaWxlLCB3aGlsZSB0aGUgTUZE IHByb3ZpZGUKPiBHUElPcyBmb3IgaXRzIHBvcnRpb25zLgo+IAo+IEFzIGEgcmVzdWx0IHdlIGNh biByZXF1ZXN0IG9uZSBHUElPIGZyb20gb3VyIG93biBHUElPIGNoaXAKPiBhbmQgZHJvcCB0d28g aGFpcnkgY2FsbGJhY2tzIGludG8gdGhlIGJvYXJkIGZpbGUuCj4gCj4gVGhpcyBwbGF0Zm9ybSBi YWRseSBuZWVkcyB0byBoYXZlIGl0cyBkcml2ZXJzIHNwbGl0IHVwIGFuZAo+IGNvbnZlcnRlZCB0 byBkZXZpY2UgdHJlZSBwcm9iaW5nIHRvIGhhbmRsZSB0aGlzIHF1aXRlIGNvbXBsZXgKPiByZWxh dGlvbnNoaXAgaW4gYW4gb3JkZXJseSBtYW5uZXIuIEkganVzdCBkbyBteSBiZXN0IGluIHNvbHZp bmcKPiB0aGUgR1BJTyBkZXNjcmlwdG9yIHBhcnQgb2YgdGhlIHB1enpsZS4gUGxlYXNlIGRvbid0 IGFzayBtZQo+IHRvIGZpeCBldmVyeXRoaW5nIHRoYXQgaXMgd3Jvbmcgd2l0aCB0aGVzZSBkcml2 ZXIgdG8gdG9kYXlzCj4gc3RhbmRhcmRzLCBJIGFtIGp1c3QgdHJ5aW5nIHRvIGZpeCBvbmUgYXNw ZWN0LiBJIGRvIHRyeSB0bwo+IHVzZSBtb2Rlcm4gZGV2cmVzIHJlc291cmNlIG1hbmFnZW1lbnQg YW5kIGhhbmRsZSBkZWZlcnJlZAo+IHByb2JlIHVzaW5nIG5ldyBmdW5jdGlvbnMgd2hlcmUgYXBw cm9wcmlhdGUuCj4gCj4gQ2M6IERtaXRyeSBFcmVtaW4tU29sZW5pa292IDxkYmFyeXNoa292QGdt YWlsLmNvbT4KPiBDYzogRGlyayBPcGZlciA8ZGlya0BvcGZlci1vbmxpbmUuZGU+Cj4gQ2M6IFJv YmVydCBKYXJ6bWlrIDxyb2JlcnQuamFyem1pa0BmcmVlLmZyPgo+IENjOiBEYW5pZWwgTWFjayA8 ZGFuaWVsQHpvbnF1ZS5vcmc+Cj4gQ2M6IEhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0Bn bWFpbC5jb20+Cj4gQ2M6IExlZSBKb25lcyA8bGVlLmpvbmVzQGxpbmFyby5vcmc+Cj4gQ2M6IFNl YmFzdGlhbiBSZWljaGVsIDxzcmVAa2VybmVsLm9yZz4KPiBDYzogTGlhbSBHaXJkd29vZCA8bGdp cmR3b29kQGdtYWlsLmNvbT4KPiBDYzogTWFyayBCcm93biA8YnJvb25pZUBrZXJuZWwub3JnPgo+ IFNpZ25lZC1vZmYtYnk6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4K PiAtLS0KPiBEbWl0cnkvRGlyazogaXQnZCBiZSBncmVhdCBpZiB5b3UgY291bGQgdGVzdCB0aGlz IHBhdGNoIG9uCj4gdGhlIFRvc2EgYW5kIHRyeSB0byBoZWxwIG1lIGlyb24gb3V0IGFueSBidWdz Lgo+IAo+IE1lcmdpbmcgc3RyYXRlZ3k6IHBsZWFzZSBwcm92aWRlIEFDS3MgYW5kIEkgd2lsbCBh dHRlbXB0Cj4gdG8gbWVyZ2UgdGhpcyB0aHJvdWdoIHRoZSBTb0MgdHJlZS4KPiAtLS0KPiAgYXJj aC9hcm0vbWFjaC1weGEvZXNlcmllcy5jICAgICAgICAgICB8ICAgMiAtCj4gIGFyY2gvYXJtL21h Y2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmggfCAgMTggLS0tCj4gIGFyY2gvYXJtL21hY2gtcHhh L3Rvc2EuYyAgICAgICAgICAgICAgfCAgNjggKysrLS0tLS0tLQo+ICBkcml2ZXJzL21mZC90YzYz OTN4Yi5jICAgICAgICAgICAgICAgIHwgMTQ3ICsrKysrKysrKysrKysrKystLS0tLS0KPiAgZHJp dmVycy9wb3dlci9zdXBwbHkvdG9zYV9iYXR0ZXJ5LmMgICB8IDE3MSArKysrKysrKysrKysrKysr LS0tLS0tLS0tLQo+ICBpbmNsdWRlL2xpbnV4L21mZC90YzYzOTN4Yi5oICAgICAgICAgIHwgICAx IC0KPiAgc291bmQvc29jL3B4YS90b3NhLmMgICAgICAgICAgICAgICAgICB8ICAyMCArKy0KPiAg NyBmaWxlcyBjaGFuZ2VkLCAyNDYgaW5zZXJ0aW9ucygrKSwgMTgxIGRlbGV0aW9ucygtKQoKWy4u Ll0KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMgYi9kcml2ZXJzL21mZC90 YzYzOTN4Yi5jCj4gaW5kZXggM2Q1YjE0YzYwZTIwLi43MmFjNDcxY2IwZjUgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYwo+ICsrKyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMK PiBAQCAtMjIsNiArMjIsOCBAQAo+ICAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KPiAgI2lu Y2x1ZGUgPGxpbnV4L21mZC90YzYzOTN4Yi5oPgo+ICAjaW5jbHVkZSA8bGludXgvZ3Bpby9kcml2 ZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vbWFjaGluZS5oPiAvKiBQcm92aWRlcyBHUElP IGxpbmVzIHRvIGNoaWxkcmVuICovCj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+ IC8qIFJlcXVlc3Rpbmcgb3duIEdQSU9zICovCgpBcmUgdGhlc2UgY29tbWVudHMgcmVhbGx5IG5l Y2Vzc2FyeT8KCj4gICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gIAo+ICAjZGVmaW5lIFNDUl9S RVZJRAkweDA4CQkvKiBiIFJldmlzaW9uIElECSovCj4gQEAgLTg3LDggKzg5LDEwIEBACj4gIAo+ ICBzdHJ1Y3QgdGM2MzkzeGIgewo+ICAJdm9pZCBfX2lvbWVtCQkqc2NyOwo+ICsJc3RydWN0IGRl dmljZQkJKmRldjsKPiAgCj4gIAlzdHJ1Y3QgZ3Bpb19jaGlwCWdwaW87Cj4gKwlzdHJ1Y3QgZ3Bp b19kZXNjCSp2Y2Nfb247Cj4gIAo+ICAJc3RydWN0IGNsawkJKmNsazsgLyogMyw2IE1oeiAqLwo+ ICAKPiBAQCAtNDk3LDE3ICs1MDEsMTEwIEBAIHN0YXRpYyBpbnQgdGM2MzkzeGJfZ3Bpb19kaXJl Y3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ ICAKPiAtc3RhdGljIGludCB0YzYzOTN4Yl9yZWdpc3Rlcl9ncGlvKHN0cnVjdCB0YzYzOTN4YiAq dGM2MzkzeGIsIGludCBncGlvX2Jhc2UpCj4gKy8qCj4gKyAqIFRDNjM5M1hCIEdQSU9zIGFzIHVz ZWQgb24gVE9TQSwgdGhlIG9ubHkgdXNlciBvZiB0aGlzIGNoaXAuIElmIHlvdSBhZGQgbW9yZQoK TWlzc2luZyBhbiAiYXJlIiBmb3IgY2xhcml0eT8KCj4gKyAqIHBsYXRmb3JtcyB1c2luZyB0aGlz IGNoaXAsIHJld3JpdGUgdGhpbmdzIHRvIHVzZSBkZXZpY2UgdHJlZSBhbmQgcmVnaXN0ZXIgR1BJ TwoKTm90IHN1cmUgd2Ugc2hvdWxkIGJlIGRpY3RhdGluZyBleHRlbnNpb24gbWV0aG9kcyBpbiB0 aGlzIHdheS4KCldoYXQgaWYgRFQgaXMgZGVwcmVjYXRlZCBieSB0aGUgdGltZSB0aGlzIGlzIGV4 cGFuZGVkPwoKPiArICogcmVzb3VyY2VzIHRoZXJlLgo+ICsgKi8KPiArI2RlZmluZSBUT1NBX0dD X05BTUUJCQkidGM2MzkzeGIiCgpQbGVhc2UgdXNlIHRoZSBuYW1lIHN0cmluZyBpbi1wbGFjZS4K Cj4gKyNkZWZpbmUgVE9TQV9HUElPX1RHX09OCQkJMAo+ICsjZGVmaW5lIFRPU0FfR1BJT19MX01V VEUJCTEKPiArI2RlZmluZSBUT1NBX0dQSU9fQkxfQzIwTUEJCTMKPiArI2RlZmluZSBUT1NBX0dQ SU9fQ0FSRF9WQ0NfT04JCTQKPiArI2RlZmluZSBUT1NBX0dQSU9fQ0hBUkdFX09GRgkJNgo+ICsj ZGVmaW5lIFRPU0FfR1BJT19DSEFSR0VfT0ZGX0pDCQk3Cj4gKyNkZWZpbmUgVE9TQV9HUElPX0JB VDBfVl9PTgkJOQo+ICsjZGVmaW5lIFRPU0FfR1BJT19CQVQxX1ZfT04JCTEwCj4gKyNkZWZpbmUg VE9TQV9HUElPX0JVX0NIUkdfT04JCTExCj4gKyNkZWZpbmUgVE9TQV9HUElPX0JBVF9TV19PTgkJ MTIKPiArI2RlZmluZSBUT1NBX0dQSU9fQkFUMF9USF9PTgkJMTQKPiArI2RlZmluZSBUT1NBX0dQ SU9fQkFUMV9USF9PTgkJMTUKCk9rYXksIEkgaGF2ZSB0byBhc2sgLSB3aGF0IGFyZSA1LCA4IGFu ZCAxMz8KCj4gK3N0YXRpYyBzdHJ1Y3QgZ3Bpb2RfbG9va3VwX3RhYmxlIHRvc2FfbGNkX2dwaW9f bG9va3VwID0gewo+ICsJLmRldl9pZCA9ICJzcGkyLjAiLAo+ICsJLnRhYmxlID0gewo+ICsJCUdQ SU9fTE9PS1VQKFRPU0FfR0NfTkFNRSwgVE9TQV9HUElPX1RHX09OLCAidGcgI3B3ciIsIEdQSU9f QUNUSVZFX0hJR0gpLAo+ICsJCXsgfSwKPiArCX0sCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IGdwaW9kX2xvb2t1cF90YWJsZSB0b3NhX2xjZF9ibF9ncGlvX2xvb2t1cCA9IHsKPiArCS5kZXZf aWQgPSAiaTJjLXRvc2EtYmwiLAo+ICsJLnRhYmxlID0gewo+ICsJCUdQSU9fTE9PS1VQKFRPU0Ff R0NfTkFNRSwgVE9TQV9HUElPX0JMX0MyME1BLCAiYmFja2xpZ2h0IiwgR1BJT19BQ1RJVkVfSElH SCksCj4gKwkJeyB9LAo+ICsJfSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZ3Bpb2RfbG9v a3VwX3RhYmxlIHRvc2FfYXVkaW9fZ3Bpb19sb29rdXAgPSB7Cj4gKwkuZGV2X2lkID0gInRvc2Et YXVkaW8iLAo+ICsJLnRhYmxlID0gewo+ICsJCUdQSU9fTE9PS1VQKFRPU0FfR0NfTkFNRSwgVE9T QV9HUElPX0xfTVVURSwgTlVMTCwgR1BJT19BQ1RJVkVfSElHSCksCj4gKwkJeyB9LAo+ICsJfSwK PiArfTsKCkFyZSB0aGVzZSBzdHJ1Y3R1cmVzIGdvaW5nIHRvIGJlIHBlcHBlcmVkIGFsbCBvdmVy IHRoZSBrZXJuZWwgbm93PwoKTWF5YmUgYSBoZWxwZXIgY2FuIGJlIGFkZGVkIHRvIG1ha2UgdGhl c2Ugc2luZ2xlIGxpbmUgZW50cmllcyBvbmUgbGluZQplYWNoPwoKPiArc3RhdGljIHN0cnVjdCBn cGlvZF9sb29rdXBfdGFibGUgdG9zYV9iYXR0ZXJ5X2dwaW9fbG9va3VwID0gewo+ICsJLmRldl9p ZCA9ICJ3bTk3eHgtYmF0dGVyeSIsCj4gKwkudGFibGUgPSB7Cj4gKwkJR1BJT19MT09LVVAoVE9T QV9HQ19OQU1FLCBUT1NBX0dQSU9fQ0hBUkdFX09GRiwKPiArCQkJICAgICJtYWluIGNoYXJnZSBv ZmYiLCBHUElPX0FDVElWRV9ISUdIKSwKPiArCQlHUElPX0xPT0tVUChUT1NBX0dDX05BTUUsIFRP U0FfR1BJT19DSEFSR0VfT0ZGX0pDLAo+ICsJCQkgICAgImphY2tldCBjaGFyZ2Ugb2ZmIiwgR1BJ T19BQ1RJVkVfSElHSCksCj4gKwkJR1BJT19MT09LVVAoVE9TQV9HQ19OQU1FLCBUT1NBX0dQSU9f QkFUMF9WX09OLAo+ICsJCQkgICAgIm1haW4gYmF0dGVyeSIsIEdQSU9fQUNUSVZFX0hJR0gpLAo+ ICsJCUdQSU9fTE9PS1VQKFRPU0FfR0NfTkFNRSwgVE9TQV9HUElPX0JBVDFfVl9PTiwKPiArCQkJ ICAgICJqYWNrZXQgYmF0dGVyeSIsIEdQSU9fQUNUSVZFX0hJR0gpLAo+ICsJCUdQSU9fTE9PS1VQ KFRPU0FfR0NfTkFNRSwgVE9TQV9HUElPX0JVX0NIUkdfT04sCj4gKwkJCSAgICAiYmFja3VwIGJh dHRlcnkiLCBHUElPX0FDVElWRV9ISUdIKSwKPiArCQkvKiBCQVQxIGFuZCBCQVQwIHRoZXJtaXN0 b3JzIGFwcGVhciB0byBiZSBzd2FwcGVkICovCj4gKwkJR1BJT19MT09LVVAoVE9TQV9HQ19OQU1F LCBUT1NBX0dQSU9fQkFUMV9USF9PTiwKPiArCQkJICAgICJtYWluIGJhdHRlcnkgdGVtcCIsIEdQ SU9fQUNUSVZFX0hJR0gpLAo+ICsJCUdQSU9fTE9PS1VQKFRPU0FfR0NfTkFNRSwgVE9TQV9HUElP X0JBVDBfVEhfT04sCj4gKwkJCSAgICAiamFja2V0IGJhdHRlcnkgdGVtcCIsIEdQSU9fQUNUSVZF X0hJR0gpLAo+ICsJCUdQSU9fTE9PS1VQKFRPU0FfR0NfTkFNRSwgVE9TQV9HUElPX0JBVF9TV19P TiwKPiArCQkJICAgICJiYXR0ZXJ5IHN3aXRjaCIsIEdQSU9fQUNUSVZFX0hJR0gpLAoKVGhlc2Ug YXJlIHNvb29vIGNsb3NlIHRvIGJlaW5nIDwxMDAgY2hhcnMuCgpXaGF0IGRvZXMgQ2hlY2twYXRj aCBjdXJyZW50bHkgd2FybiBvbj8gIElzIGl0IDEwMCBvciAxMjA/Cgo+ICsJCXsgfSwKPiArCX0s Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGdwaW9kX2xvb2t1cF90YWJsZSAqdGM2MzkzeGJf Z3Bpb19sb29rdXBzW10gPSB7Cj4gKwkmdG9zYV9sY2RfZ3Bpb19sb29rdXAsCj4gKwkmdG9zYV9s Y2RfYmxfZ3Bpb19sb29rdXAsCj4gKwkmdG9zYV9hdWRpb19ncGlvX2xvb2t1cCwKPiArCSZ0b3Nh X2JhdHRlcnlfZ3Bpb19sb29rdXAsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHRjNjM5M3hiX3Jl Z2lzdGVyX2dwaW8oc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YikKPiAgewo+IC0JdGM2MzkzeGIt PmdwaW8ubGFiZWwgPSAidGM2MzkzeGIiOwo+IC0JdGM2MzkzeGItPmdwaW8uYmFzZSA9IGdwaW9f YmFzZTsKPiAtCXRjNjM5M3hiLT5ncGlvLm5ncGlvID0gMTY7Cj4gLQl0YzYzOTN4Yi0+Z3Bpby5z ZXQgPSB0YzYzOTN4Yl9ncGlvX3NldDsKPiAtCXRjNjM5M3hiLT5ncGlvLmdldCA9IHRjNjM5M3hi X2dwaW9fZ2V0Owo+IC0JdGM2MzkzeGItPmdwaW8uZGlyZWN0aW9uX2lucHV0ID0gdGM2MzkzeGJf Z3Bpb19kaXJlY3Rpb25faW5wdXQ7Cj4gLQl0YzYzOTN4Yi0+Z3Bpby5kaXJlY3Rpb25fb3V0cHV0 ID0gdGM2MzkzeGJfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0Owo+IC0KPiAtCXJldHVybiBncGlvY2hp cF9hZGRfZGF0YSgmdGM2MzkzeGItPmdwaW8sIHRjNjM5M3hiKTsKPiArCXN0cnVjdCBncGlvX2No aXAgKmdjID0gJnRjNjM5M3hiLT5ncGlvOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gdGM2Mzkz eGItPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJZ2MtPmxhYmVsID0gVE9TQV9HQ19OQU1FOwo+ ICsJZ2MtPmJhc2UgPSAtMTsgLyogRHluYW1pYyBhbGxvY2F0aW9uICovCgpHbG9iYWwgZGVmaW5l PwoKPiArCWdjLT5uZ3BpbyA9IDE2Owo+ICsJZ2MtPnNldCA9IHRjNjM5M3hiX2dwaW9fc2V0Owo+ ICsJZ2MtPmdldCA9IHRjNjM5M3hiX2dwaW9fZ2V0Owo+ICsJZ2MtPmRpcmVjdGlvbl9pbnB1dCA9 IHRjNjM5M3hiX2dwaW9fZGlyZWN0aW9uX2lucHV0Owo+ICsJZ2MtPmRpcmVjdGlvbl9vdXRwdXQg PSB0YzYzOTN4Yl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7Cj4gKwo+ICsJcmV0ID0gZGV2bV9ncGlv Y2hpcF9hZGRfZGF0YShkZXYsIGdjLCB0YzYzOTN4Yik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVy biBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiZmFpbGVkIHRvIGFkZCBHUElPIGNoaXBcbiIpOwo+ ICsKPiArCS8qIFJlZ2lzdGVyIGRlc2NyaXB0b3IgbG9vay11cHMgZm9yIGNvbnN1bWVycyAqLwo+ ICsJZ3Bpb2RfYWRkX2xvb2t1cF90YWJsZXModGM2MzkzeGJfZ3Bpb19sb29rdXBzLCBBUlJBWV9T SVpFKHRjNjM5M3hiX2dwaW9fbG9va3VwcykpOwo+ICsKPiArCS8qIFJlcXVlc3Qgc29tZSBvZiBv dXIgb3duIEdQSU9zICovCj4gKwl0YzYzOTN4Yi0+dmNjX29uID0gZ3Bpb2NoaXBfcmVxdWVzdF9v d25fZGVzYyhnYywgVE9TQV9HUElPX0NBUkRfVkNDX09OLCAiVkNDIE9OIiwKPiArCQkJCQkJICAg ICBHUElPX0FDVElWRV9ISUdILCBHUElPRF9PVVRfSElHSCk7Cj4gKwlpZiAoSVNfRVJSKHRjNjM5 M3hiLT52Y2Nfb24pKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUih0YzYz OTN4Yi0+dmNjX29uKSwKPiArCQkJCSAgICAgImZhaWxlZCB0byByZXF1ZXN0IFZDQyBPTiBHUElP XG4iKTsKPiArCgpTbyBtdWNoIG1vcmUgY29kZSB0byBkbyB0aGUgc2FtZSB0aGluZz8KCj4gKwly ZXR1cm4gMDsKPiAgfQo+ICAKPiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCj4gQEAgLTYxNyw2ICs3 MTQsNyBAQCBzdGF0aWMgaW50IHRjNjM5M3hiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KmRldikKPiAgCQlyZXQgPSAtRU5PTUVNOwo+ICAJCWdvdG8gZXJyX2t6YWxsb2M7Cj4gIAl9Cj4g Kwl0YzYzOTN4Yi0+ZGV2ID0gJmRldi0+ZGV2OwoKVGhhdCBjb25mdXNlZCBtZSBhdCBmaXJzdC4K ClBsZWFzZSBjb25zaWRlciBjaGFuZ2luZyB0aGUgcGxhdGZvcm1fZGV2aWNlIHRvIHBkZXYgKHNl cGFyYXRlbHkpLgoKPiAgCXJhd19zcGluX2xvY2tfaW5pdCgmdGM2MzkzeGItPmxvY2spOwo+ICAK PiBAQCAtNjc2LDIyICs3NzQsMTIgQEAgc3RhdGljIGludCB0YzYzOTN4Yl9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpkZXYpCj4gIAkJCXRtaW9faW9yZWFkOCh0YzYzOTN4Yi0+c2NyICsg U0NSX1JFVklEKSwKPiAgCQkJKHVuc2lnbmVkIGxvbmcpIGlvbWVtLT5zdGFydCwgdGM2MzkzeGIt PmlycSk7Cj4gIAo+IC0JdGM2MzkzeGItPmdwaW8uYmFzZSA9IC0xOwo+IC0KPiAtCWlmICh0Y3Bk LT5ncGlvX2Jhc2UgPj0gMCkgewo+IC0JCXJldCA9IHRjNjM5M3hiX3JlZ2lzdGVyX2dwaW8odGM2 MzkzeGIsIHRjcGQtPmdwaW9fYmFzZSk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJZ290byBlcnJfZ3Bp b19hZGQ7Cj4gLQl9Cj4gKwlyZXQgPSB0YzYzOTN4Yl9yZWdpc3Rlcl9ncGlvKHRjNjM5M3hiKTsK PiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfZ3Bpb19hZGQ7Cj4gIAo+ICAJdGM2MzkzeGJfYXR0 YWNoX2lycShkZXYpOwo+ICAKPiAtCWlmICh0Y3BkLT5zZXR1cCkgewo+IC0JCXJldCA9IHRjcGQt PnNldHVwKGRldik7Cj4gLQkJaWYgKHJldCkKPiAtCQkJZ290byBlcnJfc2V0dXA7Cj4gLQl9Cj4g LQo+ICAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5wbGF0Zm9ybV9kYXRhID0g dGNwZC0+bmFuZF9kYXRhOwo+ICAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5w ZGF0YV9zaXplID0KPiAgCQkJCQkJc2l6ZW9mKCp0Y3BkLT5uYW5kX2RhdGEpOwo+IEBAIC03MDUs MTUgKzc5Myw4IEBAIHN0YXRpYyBpbnQgdGM2MzkzeGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqZGV2KQo+ICAJaWYgKCFyZXQpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JaWYgKHRjcGQt PnRlYXJkb3duKQo+IC0JCXRjcGQtPnRlYXJkb3duKGRldik7Cj4gLQo+IC1lcnJfc2V0dXA6Cj4g IAl0YzYzOTN4Yl9kZXRhY2hfaXJxKGRldik7Cj4gLQo+ICBlcnJfZ3Bpb19hZGQ6Cj4gLQlpZiAo dGM2MzkzeGItPmdwaW8uYmFzZSAhPSAtMSkKPiAtCQlncGlvY2hpcF9yZW1vdmUoJnRjNjM5M3hi LT5ncGlvKTsKPiAgCXRjcGQtPmRpc2FibGUoZGV2KTsKPiAgZXJyX2VuYWJsZToKPiAgCWNsa19k aXNhYmxlX3VucHJlcGFyZSh0YzYzOTN4Yi0+Y2xrKTsKPiBAQCAtNzM4LDE0ICs4MTksOCBAQCBz dGF0aWMgaW50IHRjNjM5M3hiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCj4g IAo+ICAJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7Cj4gIAo+IC0JaWYgKHRjcGQtPnRl YXJkb3duKQo+IC0JCXRjcGQtPnRlYXJkb3duKGRldik7Cj4gLQo+ICAJdGM2MzkzeGJfZGV0YWNo X2lycShkZXYpOwo+ICAKPiAtCWlmICh0YzYzOTN4Yi0+Z3Bpby5iYXNlICE9IC0xKQo+IC0JCWdw aW9jaGlwX3JlbW92ZSgmdGM2MzkzeGItPmdwaW8pOwo+IC0KClRha2luZyBhd2F5IGFsbCBvZiB0 aGVzZSBsaW5lcyBpcyBuaWNlLgoKPiAgCXJldCA9IHRjcGQtPmRpc2FibGUoZGV2KTsKPiAgCWNs a19kaXNhYmxlX3VucHJlcGFyZSh0YzYzOTN4Yi0+Y2xrKTsKPiAgCWlvdW5tYXAodGM2MzkzeGIt PnNjcik7CgotLSAKTGVlIEpvbmVzIFvmnY7nkLzmlq9dClNlbmlvciBUZWNobmljYWwgTGVhZCAt IERldmVsb3BlciBTZXJ2aWNlcwpMaW5hcm8ub3JnIOKUgiBPcGVuIHNvdXJjZSBzb2Z0d2FyZSBm b3IgQXJtIFNvQ3MKRm9sbG93IExpbmFybzogRmFjZWJvb2sgfCBUd2l0dGVyIHwgQmxvZwoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=