[{"id":3679507,"web_url":"http://patchwork.ozlabs.org/comment/3679507/","msgid":"<TYRPR01MB156193428AFA2FE631556EEDA852F2@TYRPR01MB15619.jpnprd01.prod.outlook.com>","list_archive_url":null,"date":"2026-04-20T17:55:07","subject":"RE: [PATCH v5 4/9] pwm: rzg2l-gpt: Convert to waveform callbacks","submitter":{"id":91755,"url":"http://patchwork.ozlabs.org/api/people/91755/","name":"Cosmin-Gabriel Tanislav","email":"cosmin-gabriel.tanislav.xa@renesas.com"},"content":"> -----Original Message-----\n> From: Biju\n> Sent: Monday, April 20, 2026 1:43 PM\n> To: Uwe Kleine-König <ukleinek@kernel.org>\n> Cc: Biju Das <biju.das.jz@bp.renesas.com>; linux-pwm@vger.kernel.org; linux-kernel@vger.kernel.org;\n> Geert Uytterhoeven <geert+renesas@glider.be>; Prabhakar Mahadev Lad <prabhakar.mahadev-\n> lad.rj@bp.renesas.com>; Biju Das <biju.das.au@gmail.com>; linux-renesas-soc@vger.kernel.org\n> Subject: [PATCH v5 4/9] pwm: rzg2l-gpt: Convert to waveform callbacks\n> \n> From: Biju Das <biju.das.jz@bp.renesas.com>\n> \n> Migrate the rzg2l-gpt driver from the legacy .get_state/.apply ops to the\n> new waveform callback interface.\n> \n> Introduce struct rzg2l_gpt_waveform to represent a hardware waveform\n> configuration holding the period register value (gtpr), compare/capture\n> register value (gtccr), and prescaler (prescale).\n> \n> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>\n> ---\n> v5:\n>  * Updated commit description.\n>  * Updated rzg2l_gpt_round_waveform_tohw() to initialize gtccr when the\n>    period of the second channel is smaller.\n>  * Replaced period_ticks with RZG2L_MAX_TICKS for the duty_ticks maximum\n>    value check in rzg2l_gpt_round_waveform_tohw().\n> v4 from [1]\n> [1] https://lore.kernel.org/all/20251208152133.269316-3-biju.das.jz@bp.renesas.com/\n> ---\n>  drivers/pwm/pwm-rzg2l-gpt.c | 197 ++++++++++++++++++++++--------------\n>  1 file changed, 121 insertions(+), 76 deletions(-)\n> \n> diff --git a/drivers/pwm/pwm-rzg2l-gpt.c b/drivers/pwm/pwm-rzg2l-gpt.c\n> index 659044fa3d2f..9e7a897a0b4d 100644\n> --- a/drivers/pwm/pwm-rzg2l-gpt.c\n> +++ b/drivers/pwm/pwm-rzg2l-gpt.c\n> @@ -100,6 +100,13 @@ struct rzg2l_gpt_chip {\n>  \tDECLARE_BITMAP(poeg_gpt_link, RZG2L_MAX_POEG_GROUPS * RZG2L_MAX_HW_CHANNELS);\n>  };\n> \n> +/* This represents a hardware configuration for one channel */\n> +struct rzg2l_gpt_waveform {\n> +\tu32 gtpr;\n> +\tu32 gtccr;\n> +\tu8 prescale;\n> +};\n> +\n>  static inline struct rzg2l_gpt_chip *to_rzg2l_gpt_chip(struct pwm_chip *chip)\n>  {\n>  \treturn pwmchip_get_drvdata(chip);\n> @@ -166,7 +173,8 @@ static void rzg2l_gpt_free(struct pwm_chip *chip, struct pwm_device *pwm)\n>  \trzg2l_gpt->channel_request_count[ch]--;\n>  }\n> \n> -static bool rzg2l_gpt_is_ch_enabled(struct rzg2l_gpt_chip *rzg2l_gpt, u8 hwpwm)\n> +static bool rzg2l_gpt_is_ch_enabled(struct rzg2l_gpt_chip *rzg2l_gpt, u8 hwpwm,\n> +\t\t\t\t    u32 *gtcr)\n>  {\n>  \tu8 ch = RZG2L_GET_CH(hwpwm);\n>  \tu32 val;\n> @@ -175,6 +183,9 @@ static bool rzg2l_gpt_is_ch_enabled(struct rzg2l_gpt_chip *rzg2l_gpt, u8 hwpwm)\n>  \tif (!(val & RZG2L_GTCR_CST))\n>  \t\treturn false;\n> \n> +\tif (gtcr)\n> +\t\t*gtcr = val;\n> +\n>  \tval = rzg2l_gpt_read(rzg2l_gpt, RZG2L_GTIOR(ch));\n> \n>  \treturn val & RZG2L_GTIOR_OxE(rzg2l_gpt_subchannel(hwpwm));\n> @@ -233,54 +244,38 @@ static u64 rzg2l_gpt_calculate_period_or_duty(struct rzg2l_gpt_chip *rzg2l_gpt,\n>  \treturn DIV64_U64_ROUND_UP(tmp, rzg2l_gpt->rate_khz);\n>  }\n> \n> -static int rzg2l_gpt_get_state(struct pwm_chip *chip, struct pwm_device *pwm,\n> -\t\t\t       struct pwm_state *state)\n> -{\n> -\tstruct rzg2l_gpt_chip *rzg2l_gpt = to_rzg2l_gpt_chip(chip);\n> -\n> -\tstate->enabled = rzg2l_gpt_is_ch_enabled(rzg2l_gpt, pwm->hwpwm);\n> -\tif (state->enabled) {\n> -\t\tu32 sub_ch = rzg2l_gpt_subchannel(pwm->hwpwm);\n> -\t\tu32 ch = RZG2L_GET_CH(pwm->hwpwm);\n> -\t\tu8 prescale;\n> -\t\tu32 val;\n> -\n> -\t\tval = rzg2l_gpt_read(rzg2l_gpt, RZG2L_GTCR(ch));\n> -\t\tprescale = FIELD_GET(RZG2L_GTCR_TPCS, val);\n> -\n> -\t\tval = rzg2l_gpt_read(rzg2l_gpt, RZG2L_GTPR(ch));\n> -\t\tstate->period = rzg2l_gpt_calculate_period_or_duty(rzg2l_gpt, val, prescale);\n> -\n> -\t\tval = rzg2l_gpt_read(rzg2l_gpt, RZG2L_GTCCR(ch, sub_ch));\n> -\t\tstate->duty_cycle = rzg2l_gpt_calculate_period_or_duty(rzg2l_gpt, val, prescale);\n> -\t\tif (state->duty_cycle > state->period)\n> -\t\t\tstate->duty_cycle = state->period;\n> -\t}\n> -\n> -\tstate->polarity = PWM_POLARITY_NORMAL;\n> -\n> -\treturn 0;\n> -}\n> -\n>  static u32 rzg2l_gpt_calculate_pv_or_dc(u64 period_or_duty_cycle, u8 prescale)\n>  {\n>  \treturn min_t(u64, DIV_ROUND_DOWN_ULL(period_or_duty_cycle, 1 << (2 * prescale)),\n>  \t\t     U32_MAX);\n>  }\n> \n> -/* Caller holds the lock while calling rzg2l_gpt_config() */\n> -static int rzg2l_gpt_config(struct pwm_chip *chip, struct pwm_device *pwm,\n> -\t\t\t    const struct pwm_state *state)\n> +static int rzg2l_gpt_round_waveform_tohw(struct pwm_chip *chip,\n> +\t\t\t\t\t struct pwm_device *pwm,\n> +\t\t\t\t\t const struct pwm_waveform *wf,\n> +\t\t\t\t\t void *_wfhw)\n> +\n>  {\n>  \tstruct rzg2l_gpt_chip *rzg2l_gpt = to_rzg2l_gpt_chip(chip);\n> -\tu8 sub_ch = rzg2l_gpt_subchannel(pwm->hwpwm);\n> +\tstruct rzg2l_gpt_waveform *wfhw = _wfhw;\n> +\tbool is_small_second_period = false;\n>  \tu8 ch = RZG2L_GET_CH(pwm->hwpwm);\n>  \tu64 period_ticks, duty_ticks;\n>  \tunsigned long pv, dc;\n> -\tu8 prescale;\n> +\n> +\tguard(mutex)(&rzg2l_gpt->lock);\n> +\tif (wf->period_length_ns == 0) {\n> +\t\t*wfhw = (struct rzg2l_gpt_waveform){\n> +\t\t\t.gtpr = 0,\n> +\t\t\t.gtccr = 0,\n> +\t\t\t.prescale = 0,\n> +\t\t};\n> +\n> +\t\treturn 0;\n> +\t}\n> \n>  \t/* Limit period/duty cycle to max value supported by the HW */\n> -\tperiod_ticks = mul_u64_u64_div_u64(state->period, rzg2l_gpt->rate_khz, USEC_PER_SEC);\n> +\tperiod_ticks = mul_u64_u64_div_u64(wf->period_length_ns, rzg2l_gpt->rate_khz, USEC_PER_SEC);\n>  \tif (period_ticks > RZG2L_MAX_TICKS)\n>  \t\tperiod_ticks = RZG2L_MAX_TICKS;\n>  \t/*\n> @@ -291,21 +286,26 @@ static int rzg2l_gpt_config(struct pwm_chip *chip, struct pwm_device *pwm,\n>  \tif (rzg2l_gpt->channel_request_count[ch] > 1) {\n>  \t\tu8 sibling_ch = rzg2l_gpt_sibling(pwm->hwpwm);\n> \n> -\t\tif (rzg2l_gpt_is_ch_enabled(rzg2l_gpt, sibling_ch)) {\n> +\t\tif (rzg2l_gpt_is_ch_enabled(rzg2l_gpt, sibling_ch, NULL)) {\n>  \t\t\tif (period_ticks < rzg2l_gpt->period_ticks[ch])\n> -\t\t\t\treturn -EBUSY;\n> +\t\t\t\tis_small_second_period = true;\n> \n>  \t\t\tperiod_ticks = rzg2l_gpt->period_ticks[ch];\n>  \t\t}\n>  \t}\n> \n> -\tprescale = rzg2l_gpt_calculate_prescale(period_ticks);\n> -\tpv = rzg2l_gpt_calculate_pv_or_dc(period_ticks, prescale);\n> +\twfhw->prescale = rzg2l_gpt_calculate_prescale(period_ticks);\n> +\tpv = rzg2l_gpt_calculate_pv_or_dc(period_ticks, wfhw->prescale);\n> +\twfhw->gtpr = pv;\n> +\twfhw->gtccr = 0;\n> +\tif (is_small_second_period)\n> +\t\treturn 1;\n> \n> -\tduty_ticks = mul_u64_u64_div_u64(state->duty_cycle, rzg2l_gpt->rate_khz, USEC_PER_SEC);\n> -\tif (duty_ticks > period_ticks)\n> -\t\tduty_ticks = period_ticks;\n> -\tdc = rzg2l_gpt_calculate_pv_or_dc(duty_ticks, prescale);\n> +\tduty_ticks = mul_u64_u64_div_u64(wf->duty_length_ns, rzg2l_gpt->rate_khz, USEC_PER_SEC);\n> +\tif (duty_ticks > RZG2L_MAX_TICKS)\n> +\t\tduty_ticks = RZG2L_MAX_TICKS;\n\nI know this change from > period_ticks to > RZG2L_MAX_TICKS has been\nsuggested by you, Uwe, but is this correct if period_ticks was set to a\nsmaller value in the earlier sibling channel condition?\n\nIn that case I think it might be possible for duty_ticks to end up\nlarger than period_ticks which wouldn't work correctly with the\n> RZG2L_MAX_TICKS check, but would have been clamped fine using the\nother check.\n\nWhat do you think?\n\n> +\tdc = rzg2l_gpt_calculate_pv_or_dc(duty_ticks, wfhw->prescale);\n> +\twfhw->gtccr = dc;\n\nIs there any reason why the results of rzg2l_gpt_calculate_pv_or_dc()\ncannot be assigned to wfhw->gtpr and wfhw->gtccr directly?\n\nThat would get rid of the pv and dc variables as we do not need them\nfor anything else anymore, as far as I can tell.\n\n> \n>  \t/*\n>  \t * GPT counter is shared by multiple channels, we cache the period ticks\n> @@ -314,6 +314,61 @@ static int rzg2l_gpt_config(struct pwm_chip *chip, struct pwm_device *pwm,\n>  \t */\n>  \trzg2l_gpt->period_ticks[ch] = period_ticks;\n> \n\nThis should be part of rzg2l_gpt_write_waveform().\n\nOtherwise, if pwm_round_waveform_might_sleep() is called without \npwm_set_waveform_might_sleep() being called immediately after with the\nrounded waveform, the software state will become out of sync with the\nhardware state.\n\nUwe, what's your take on this?\n\n> +\treturn 0;\n> +}\n> +","headers":{"Return-Path":"\n <linux-pwm+bounces-8661-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pwm@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=renesas.com header.i=@renesas.com header.a=rsa-sha256\n header.s=selector1 header.b=EqouQclz;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pwm+bounces-8661-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=renesas.com header.i=@renesas.com\n header.b=\"EqouQclz\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.125.58","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=renesas.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=renesas.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=renesas.com;"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fztWC1vsCz1yD4\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 03:57:59 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id CF39D3046F0A\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 20 Apr 2026 17:55:21 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id D00BC3A758E;\n\tMon, 20 Apr 2026 17:55:16 +0000 (UTC)","from TYVP286CU001.outbound.protection.outlook.com\n (mail-japaneastazon11011058.outbound.protection.outlook.com [52.101.125.58])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BD423A6F17;\n\tMon, 20 Apr 2026 17:55:14 +0000 (UTC)","from TYRPR01MB15619.jpnprd01.prod.outlook.com\n (2603:1096:405:29b::10) by TYYPR01MB13247.jpnprd01.prod.outlook.com\n (2603:1096:405:168::12) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.33; Mon, 20 Apr\n 2026 17:55:12 +0000","from TYRPR01MB15619.jpnprd01.prod.outlook.com\n ([fe80::a68f:5c9:9de8:4fa4]) by TYRPR01MB15619.jpnprd01.prod.outlook.com\n ([fe80::a68f:5c9:9de8:4fa4%5]) with mapi id 15.20.9818.033; Mon, 20 Apr 2026\n 17:55:07 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776707716; cv=fail;\n b=UePLpYCtSilFQnwzDVS0XCy5jyIW8QmmSyWYHnx06rSzHCM2DcSkDgRDuVB3sCV8RElNZ4emcfCoNDJvzXfeZ6S9dmXUSV/+k29Kth645cjW7FXSpzYNXbVcEHNCCe+L5qKK7lPVfEieK4BNbILdpOLlGywDtNJwyYXI2v1aVTM=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=p1E9DH6x81sD74qeQ0Olspp1EtkRS0cJx4DtZKKmC5rN1dHYljdHZZt61/xk2QsC7/Vv9R3NolVqt3sH49cYYUbn5fxJio5AUYVH7vPHGcGjeyX5uqla5lZ/ki3IvR9Rjv/F/k70MsO4ArN8RnLBfA17MeSOrpxAZMUzDajvUsP715aghdSBYJPQLOkSnTYOT7aouz7o1nQx/xp1P4MJts6uEIG7Y44QB5Ex6At0LgSh2M3t2w+zf+4RnEfONjKMhKuFy8o6U6bRy3ypsAYvqI+9RyaSyEONZiZcZLh9qWidD0bUueNki/40uMb3v62azPSeCA1MOPDB4SfpJpQzlA=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776707716; c=relaxed/simple;\n\tbh=u5HsDXI+2xn6ecsZWwS7EgID05QShYl7+yd1VSrQ3eM=;\n\th=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:\n\t Content-Type:MIME-Version;\n b=p6xnfKGdL3DHFsCxg1s0qD79YM02cn+/g7DYx1teyuy7yeaBKZ39/WcCGHdiw49ttO/ULDACHkcCidbT1XhX3II4dUn54N0FA0Ne3Ycbt29EH8oRpvCRu9H8Jzd1OI+psERHFmEXZezh/ftaIL+NVgDsxo9C+udurv4IlyhEiIw=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=L2Ut5ROevr0T0PQBez9KulPRwmmLi81Pzcs1cD88KV4=;\n b=Aai2CoqUtK/ChslQdicFv7SWhiV988TCRawyPXmv390EFoQgsUl/UygvXss82+gSmSzDwOA/4c5Zm0RO3buYuGW1zQWv/nJv+kO2gYmBnHzgKfC9IApz418f10C+vOpEvDJhVK6ba57M9phrX5MsEXV2jiS0bDAQRj071ccUkH/AwErKahfxCQt/v3EmIA8v+WQq4vLVeMltc9H5mk8HecaIPZ96Jx4pK5RlWNSmljWCIgLr7ZO4q9vmP3nio5W+8p0sxjAA2BEuFFixTvZ+lm+o/JhXKc66WFF6zGlXg+DPJL/WgFXBmp2h0FleU0s4I7MzRJwhJRGEtxcygHEG0Q=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=renesas.com;\n spf=pass smtp.mailfrom=renesas.com;\n dkim=pass (1024-bit key) header.d=renesas.com header.i=@renesas.com\n header.b=EqouQclz; arc=fail smtp.client-ip=52.101.125.58","i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=renesas.com; dmarc=pass action=none header.from=renesas.com;\n dkim=pass header.d=renesas.com; arc=none"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesas.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=L2Ut5ROevr0T0PQBez9KulPRwmmLi81Pzcs1cD88KV4=;\n b=EqouQclzAIWIXVgyo+7F/lGih18+mSuiCQPfUaKprsb4fN0TuzUPTaqZfcgYtQhnSblZy5H8zkB6boj/RBYMa1gQqJ40aX6ujRrRiYAV6Lw2RbwOW4MgD0RMEUtrAKkAJ9W7AjmAp3HZ4NkYVN52mWHV/Ok8zB6+wcYmqhrGin8=","From":"Cosmin-Gabriel Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>","To":"=?iso-8859-1?q?Uwe_Kleine-K=F6nig?= <ukleinek@kernel.org>,\n biju.das.au <biju.das.au@gmail.com>","CC":"Biju Das <biju.das.jz@bp.renesas.com>, \"linux-pwm@vger.kernel.org\"\n\t<linux-pwm@vger.kernel.org>, \"linux-kernel@vger.kernel.org\"\n\t<linux-kernel@vger.kernel.org>, Geert Uytterhoeven <geert+renesas@glider.be>,\n\tPrabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@bp.renesas.com>,\n\t\"linux-renesas-soc@vger.kernel.org\" <linux-renesas-soc@vger.kernel.org>","Subject":"RE: [PATCH v5 4/9] pwm: rzg2l-gpt: Convert to waveform callbacks","Thread-Topic":"[PATCH v5 4/9] pwm: rzg2l-gpt: Convert to waveform callbacks","Thread-Index":"AQHc0Ol9OJ14drQ/9EyWMLHIqRbl/7XoO88w","Date":"Mon, 20 Apr 2026 17:55:07 +0000","Message-ID":"\n <TYRPR01MB156193428AFA2FE631556EEDA852F2@TYRPR01MB15619.jpnprd01.prod.outlook.com>","References":"<20260420104332.153640-5-biju.das.jz@bp.renesas.com>","In-Reply-To":"<20260420104332.153640-5-biju.das.jz@bp.renesas.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=renesas.com header.i=@renesas.com header.a=rsa-sha256\n header.s=selector1 header.b=EqouQclz;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pwm+bounces-8661-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=renesas.com header.i=@renesas.com\n header.b=\"EqouQclz\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.125.58","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=renesas.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=renesas.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=renesas.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"TYRPR01MB15619:EE_|TYYPR01MB13247:EE_","x-ms-office365-filtering-correlation-id":"76db85d2-9d16-4c5e-0aa7-08de9f05f568","x-ld-processed":"53d82571-da19-47e4-9cb4-625a166a4a2a,ExtAddr","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"\n BCL:0;ARA:13230040|366016|376014|1800799024|38070700021|56012099003|22082099003|18002099003;","x-microsoft-antispam-message-info":"\n AcaOoVpb5m3GEQ25SMtdmZBl9FZtqRE+aDvkotTJgIsvPVumNLJhIs9L64wsSkQxkDx3m9kZ396o2YQmgX7TqcIzRsn39AN1zjD02/k5gnN7FMuNtiNiuXh9UnXabp4l3uaXQ1IuLfRVgbE3NBB0sVG+VxRWzAbVRzgXZ3VN6yMLvUjV/mAYdIfr+bxrVVFD+xd+TReedQ7ewTMWp6r5QuHeBWK8z2C77H69CjBb3jW9qzo0sCv/b6ytEAiWF/x1rVDE/MZsmc749zR1boQithdaIMyo9CB3hF1+8BfqLgbBoO4L4UQwI2yuexTAsYz6BivU6Yoe9UgAOvi7ggYb3T/RSbBADH3Nwv5fA/kEzVruQdpakM3sQYvSB4LWrDVwf6u5O2TMAAajWelzQZLzJLOm8t6VoCOC0zifKyxvBW3cnR8rcBM2DZY+czxlTm4l6c+CtdYs5BM+nObFssRrA59ALGkaMWaNOI1dEhNWZy6Lj6vPMwsN+oyktIn0hnPzCCoedvI3JW1PAUb1hJzrOufmRJ+XthNuUoLa+l3MA7u41lPnY6hM/tue30sraAz8XtCp3DsO8CsAQI1//8fqw96odmWSW4qrugePjdJzcjMvITxlqEhTFx8L0AS4Y73EENwK9uqEs9uoZ7RK2EH7giUMS9JlDUK4Ai4TyHDjFARmaUvW3DlnpnuoXsWsK1GeJIRvpTAdEzHS2Wmy05T5iGqPTRuthkIg7dBJyLIwMgea30GWkYOkl6cszDdbaH3b+ay5Yr5l/8mJZSVepbMcDp8AP/xysO9D0qg7urdT1aU=","x-forefront-antispam-report":"\n CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYRPR01MB15619.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700021)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?iso-8859-1?q?ZIw9psunJT55OnLA+TocSV6?=\n\t=?iso-8859-1?q?AizameGjKSelFHSCUU51mcUfQiMGHv3CCofM3bhcxPagJM1FxuCjwlv9xPhc?=\n\t=?iso-8859-1?q?PAtP8vea4GR5QB+4kbehkzsrNkJwmI7+bxV2jomFx8hsshdBLzPWUZxpvLBL?=\n\t=?iso-8859-1?q?NOx2vDf3qJORPtY8Si+RQE7AyYZ1mwsTXqf2DVFmj4JLz1QlNBBBEjEf9UpV?=\n\t=?iso-8859-1?q?uPh/5LJTo9c8g4bsbJ22WzstN/45F0jvvz1JBtadDMbRufTp/IK2Uw267zBg?=\n\t=?iso-8859-1?q?3RfGtgTN0DLqoZkhZk5oiSY+S9XMYobJnQkQCgvv4NB+GEu++jupl/cdUMW/?=\n\t=?iso-8859-1?q?ouItkz8f9D7qYXVndJ0+ssRjk2HwZNTZwtrvlSlUCjhX5GMUKhRQxsIZ7MYk?=\n\t=?iso-8859-1?q?rrINIqpRCV5dmsW2ua8pxTnBZriBiWMQD/ASkMjISkeYw4NwHAsKmU+tj4Pm?=\n\t=?iso-8859-1?q?gxE+ukcwcmR4xlAMJ0Rr6BHGOIDOG+kyMhs9q2H1ic0WQJuSt6Nz51EbinbJ?=\n\t=?iso-8859-1?q?FKpfviBGtg20vRMlVDG+RWXDbY/6Z2E/S295VJ8yUvg6mBBr1gPoaj8RaYtk?=\n\t=?iso-8859-1?q?4c7CJQkjwWq+K82+GrmzmPEEwJzVYDwnnWZiV2O/dftOtW1pUy9CdX7Bpnwj?=\n\t=?iso-8859-1?q?+V6udqnTmk9RwMVoAfASKhqKU7mLIJxdwe57ZGDd4Bfr3CnlObyCLZ1S3J41?=\n\t=?iso-8859-1?q?cN4Py1oDhhfwhXtekwzyEJ6hM9h8n3lzRS6HJzol3ARmFJfA88xBD+omBI+Z?=\n\t=?iso-8859-1?q?4WFEcr6jPWkkLI78f6xxwF8x4eqdI0orFREgmZ2b3moUNJ3Se2aDsWlQ2+ex?=\n\t=?iso-8859-1?q?COW0AqLZeAy0YloGCGqe/f+YwU2QGRr4AcjBNS7fwWB7SRL7sA/gXE/MIMNU?=\n\t=?iso-8859-1?q?NtaSnTyTVWFsn8O8oltaHwJlXx1dWyk+ivIOBguM2P2MUC5p7/DWrDdfEdWn?=\n\t=?iso-8859-1?q?yovBZ1L33GXTvuVRdI1pGhkz+tt+C+TWPWwx862HhQWxfpQQm9MwT6+2gDVJ?=\n\t=?iso-8859-1?q?8q5STjMv+rtjfCIJUmXox0D4WVw7kunT1g9+19GYxGRTOuf4tvA9/ocl+rXX?=\n\t=?iso-8859-1?q?amErtVGFgPEbZJaj1AlHgoPmh0wZA2Ru5SKC9/6+G61D9wbl/IJZr+YOSgb2?=\n\t=?iso-8859-1?q?HnkU3hqqxLizDCDGhxWcwyG9rOidD49yMy9ivPCDjfQLN+ZnuawlyTK0dNb+?=\n\t=?iso-8859-1?q?C3DRsROx3zRU8AbaMN6oPx6wWO69x1hrv9fc4Mj2rPKSUKz0mJW9RWsA+fAb?=\n\t=?iso-8859-1?q?HZ5wHze3LOH3IAgj6ziJz2Cz0w9rzRup1PYqAlIBp3qKgq1Rs89jMKpdc+Y7?=\n\t=?iso-8859-1?q?7YwbH5fzcCSzpRQ4m25tzfDLfyMa5o9JClC2m6R3d76QL1aSxzctRW27ZAYC?=\n\t=?iso-8859-1?q?+BO8SON4qSNnqu7RAB6Cd7upFQ2qcoiB+OT+/VpqX27DGlkiBzCStVMFuVhR?=\n\t=?iso-8859-1?q?1ytXVjSXHzI1HxYRscSY9M3FeryzAqV/WT/7r5MIdBNARgHXE0fuxvtTc2f1?=\n\t=?iso-8859-1?q?qKgHSr/QKaB1sosvJ4MXfO6/IZldDfNCzbz5VrkETDRfMFpPkxLXvJ8EMEOu?=\n\t=?iso-8859-1?q?27yEt9Ki3KVKJCNXxCvrOL9d3rk9zl+WitzulNruDQFFOp9gcQkQ+IUp/woZ?=\n\t=?iso-8859-1?q?QSCTWhh3pF9Nc/K2auTzk+bBzgcB1JJRrJj24xq0fZ0lXnuT0WHu2Uk7XMt7?=\n\t=?iso-8859-1?q?ZaCVRYT1KVjFSFyVNYSGCLrjTpZnHMTHIBI7K78K2e2kEfq6m6yCtcDk8TPd?=\n\t=?iso-8859-1?q?51M7bixK9o+dFBae4935Umaljz2pYKDQQLUKfRsoHq/Hy5IK99gq0lNAB9ju?=\n\t=?iso-8859-1?q?3mCNAjUbfHEMmZr4SS6Pac85CyBBC?=","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Precedence":"bulk","X-Mailing-List":"linux-pwm@vger.kernel.org","List-Id":"<linux-pwm.vger.kernel.org>","List-Subscribe":"<mailto:linux-pwm+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pwm+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-OriginatorOrg":"renesas.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"TYRPR01MB15619.jpnprd01.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 76db85d2-9d16-4c5e-0aa7-08de9f05f568","X-MS-Exchange-CrossTenant-originalarrivaltime":"20 Apr 2026 17:55:07.3736\n (UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"53d82571-da19-47e4-9cb4-625a166a4a2a","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"\n Z0AqZbbd/x3memQrd7a7VOUQUkhe/76YRYCm33nJ1ln/QfZr8dgNZjQZFYTOdTUOe+Dpkd917fFOn22k1eYo4YtWW+3oa4wmLzVp2Qjsc7Pi22zcltwGyfVHHistFOCg","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"TYYPR01MB13247"}}]