Devicetree
 help / color / mirror / Atom feed
From: dongxuyang@eswincomputing.com
To: linux@roeck-us.net, robh@kernel.org, krzk+dt@kernel.org,
	conor+dt@kernel.org, linux-hwmon@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	p.zabel@pengutronix.de
Cc: ningyu@eswincomputing.com, linmin@eswincomputing.com,
	pinkesh.vaghela@einfochips.com, luyulin@eswincomputing.com,
	dongxuyang@eswincomputing.com
Subject: [PATCH v9 0/2] Add driver support for ESWIN EIC7700 PVT controller
Date: Tue, 30 Jun 2026 17:10:40 +0800	[thread overview]
Message-ID: <20260630091040.1407-1-dongxuyang@eswincomputing.com> (raw)

From: Xuyang Dong <dongxuyang@eswincomputing.com>

Add support for the ESWIN EIC7700 PVT (Voltage, Temperature) sensor

Features:
The driver supports monitoring of voltage and temperature parameters
through the hardware monitoring subsystem. It provides an access to the
sampled Temperature and Voltage.

Test:
Tested this patch on the SiFive HiFive Premier P550 (which uses the ESWIN
EIC7700 SoC).

Updates:
  Changes in v9:
  - Taking over from Huan He <hehuan1@eswincomputing.com>, who has left the 
    company and whose email is no longer reachable. 
    Huan He's Signed-off-by tag is retained to acknowledge the original 
    contribution.
  - Update eswin,eic7700-pvt.yaml
    - Add 'Reviewed-by: Conor Dooley <conor.dooley@microchip.com>' tag.
  - Update eic7700-pvt.c and eic7700-pvt.h
    - Remove config HWMON.
    - Add eic7700_pvt_set_trim(pvt, PVT_TRIM_DEF) in
      eic7700_pvt_runtime_resume(). Re-apply the trim values to prevent
      incorrect sensor readings upon wake (Sashiko review of v8).

  - Link to v8: https://lore.kernel.org/all/20260625061049.1614-1-hehuan1@eswincomputing.com/

  Changes in v8:
  - Update eswin,eic7700-pvt.yaml
    - Delete reviewed-by tag of Krzysztof Kozlowski due to functional
      changes. Add the APB clock because when the kernel is booted with
      CMDLINE option "clk_ignore_unused", the APB clock remains enabled by
      default; without this option, the APB clock may be gated and the PVT
      driver will not operate correctly
  - Update eic7700-pvt.c and eic7700-pvt.h
    - Add APB clock support and retrieve clocks using devm_clk_bulk_get()
    - Update eic7700_pvt_hard_isr() to verify PVT_INT_STAT before clearing
      the interrupt and completing a conversion, preventing spurious
      interrupts from returning stale data or completing a conversion early
    - Update eic7700_pvt_probe() to register the PM runtime cleanup action
      before requesting the IRQ, so the IRQ is torn down before clocks are
      disabled during driver removal, preventing a possible
      use-after-disable of the hardware clock in the ISR

  - Link to v7: https://lore.kernel.org/all/20260611090505.734-1-hehuan1@eswincomputing.com/

  Changes in v7:
  - Remove the unused reset control pointer from struct pvt_hwmon and keep
    the reset control handle local to eic7700_pvt_probe()
  - Update eic7700_pvt_init_iface() to disable PVT_ENA_EN before clearing
    the interrupt status, preventing a possible level-triggered interrupt
    storm if the bootloader leaves the conversion engine running
  - Update eic7700_pvt_disable_pm_runtime() to explicitly disable runtime
    PM and avoid an unbalanced disable_depth

  - Link to v6: https://lore.kernel.org/all/20260604080430.126-1-hehuan1@eswincomputing.com/

  Changes in v6:
  - Fix the !CONFIG_PM probe error path by disabling the clock if IRQ
    request fails before the PM cleanup action is registered
  - Replace pm_runtime_put_noidle() with pm_runtime_put() in the IRQ
    handler to avoid a runtime PM reference-count race with the read path
  - Remove the unused pvt_clear_data() devres action and its associated
    devm_add_action() registration

  - Link to v5: https://lore.kernel.org/all/20260515091942.449-1-hehuan1@eswincomputing.com/

  Changes in v5:
  - Update eswin,eic7700-pvt.yaml
    - Drop the label enum constraint and remove label from the required
      list
    - Add '#thermal-sensor-cells' to the required list
    - Rename the example node to the generic sensor@... form
    - Update the binding description to describe one temperature sensor
      and one voltage sensor
  - Update eic7700-pvt.c
    - Register the hwmon device with the fixed name "pvt"
    - Remove label-based instance identification from the driver
    - Fix CONFIG_PM=n support by keeping the clock enabled when runtime PM
      is unavailable
    - Add pm_runtime_force_suspend() in the cleanup path to avoid leaving
      the device active during unbind
    - Switch system sleep callbacks to pm_runtime_force_suspend() and
      pm_runtime_force_resume()
    - Guard ISR register accesses with pm_runtime_get_if_active()
    - Add synchronize_irq() on the timeout path to avoid stale completion
      races
    - Remove temp_offset support because the raw trim register does not
      match the hwmon ABI
    - Align the commit message with the implementation (one temperature
      sensor, one voltage sensor)

  - Link to v4: https://lore.kernel.org/all/20260430064107.1598-1-hehuan1@eswincomputing.com/

  Changes in v4:
  - Update eswin,eic7700-pvt.yaml
    - Delete reviewed-by tag of Conor Dooley, because the label enum
      constraint is introduced
  - Update eic7700-pvt.c and eic7700-pvt.h
    - Remove the unused LVT/ULVT/SVT process-monitoring channels
    - Remove the probe-time power check since the PVT block is always
      powered on EIC7700 and the extra verification is unnecessary
    - Stop requesting the interrupt as shared and use the dedicated PVT IRQ
      only
    - Reorder probe initialization so the interface is initialized before
      the clock is disabled, avoiding register accesses with the clock gated
    - Fix runtime PM reference handling on error paths by balancing
      pm_runtime_get_noresume() with pm_runtime_put_noidle()
    - Add pm_runtime_put_noidle() handling for failed pm_runtime_get_sync()
      calls in hwmon read/write paths
    - Switch the PM callback registration from pm_sleep_ptr() to pm_ptr()

  - Link to v3: https://lore.kernel.org/all/20260306094312.1043-1-hehuan1@eswincomputing.com/

  Changes in v3:
  - Update eswin,eic7700-pvt.yaml
    - Remove redundant label property description and use 'label: true' to
      reference the definition in hwmon-common.yaml
    - Replace 'additionalProperties: false' with
      'unevaluatedProperties: false'
    - Remove the description for '#thermal-sensor-cells'
  - Update eic7700-pvt.c and eic7700-pvt.h
    - Fix clock reference count imbalance with Runtime PM:
      Replace devm_clk_get_enabled() with devm_clk_get() and manually
      manage clock enable/disable to avoid double-disable in remove() when
      Runtime PM is active. Clock is now enabled only during probe for
      eic7700_pvt_check_pwr(), then disabled before enabling Runtime PM,
      which takes full control of the clock thereafter
    - Add detailed comment explaining the spurious interrupt risk in
      eic7700_pvt_check_pwr()
    - Replace wait_for_completion_interruptible() with
      wait_for_completion_timeout() to prevent infinite wait

  - Link to v2: https://lore.kernel.org/all/20260128101400.859-1-hehuan1@eswincomputing.com/

  Changes in v2:
  - Update eswin,eic7700-pvt.yaml
    - Reference the hwmon-common.yaml file
    - Remove the clock-names and reset-names properties
    - Move additionalProperties: false after the required block
    - Remove one example node to avoid redundancy
  - Update eic7700-pvt.c and eic7700-pvt.h
    - Remove unused sensor macros (PVT_SENSOR_FIRST, PVT_SENSOR_LAST,
      PVT_SENSORS_NUM)
    - Drop the unnecessary hwmon-sysfs.h header
    - Replace dynamic sensor info allocation with a static array and unify
      sensor labels
    - Remove unused hwmon_temp_type attribute
    - Eliminate redundant validation checks
    - Remove mutex and related locking, relying on hwmon core
      serialization
    - Replace per-sensor caches and completions with a single data cache
      and completion object
    - Remove pvt->sensor tracking. ISR no longer depends on the currently
      selected sensor
    - Move devm_add_action() registration after init_completion() for
      safer cleanup, and update cleanup function (pvt_clear_data)
    - Replace devm_reset_control_get_optional_exclusive() with
      devm_reset_control_get_exclusive_deasserted()
    - Replace eic7700_pvt_remove() with eic7700_pvt_disable_pm_runtime()
      and move it after PM runtime enable to avoid resource leaks on probe
      failure and remove clock disable and reset assert from
      eic7700_pvt_disable_pm_runtime() as it is already handled by devm_*
      framework
    - Remove redundant clock presence check in runtime_resume

  - Link to v1: https://lore.kernel.org/all/20260109090718.442-1-hehuan1@eswincomputing.com/

Huan He (2):
  dt-bindings: hwmon: Add Eswin EIC7700 PVT sensor
  hwmon: Add Eswin EIC7700 PVT sensor driver

 .../bindings/hwmon/eswin,eic7700-pvt.yaml     |  72 +++
 drivers/hwmon/Kconfig                         |  11 +
 drivers/hwmon/Makefile                        |   1 +
 drivers/hwmon/eic7700-pvt.c                   | 509 ++++++++++++++++++
 drivers/hwmon/eic7700-pvt.h                   |  99 ++++
 5 files changed, 692 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/hwmon/eswin,eic7700-pvt.yaml
 create mode 100644 drivers/hwmon/eic7700-pvt.c
 create mode 100644 drivers/hwmon/eic7700-pvt.h

--
2.34.1


             reply	other threads:[~2026-06-30  9:10 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-30  9:10 dongxuyang [this message]
2026-06-30  9:11 ` [PATCH v9 1/2] dt-bindings: hwmon: Add Eswin EIC7700 PVT sensor dongxuyang
2026-06-30  9:24   ` sashiko-bot
2026-07-01  2:52   ` Guenter Roeck
2026-06-30  9:12 ` [PATCH v9 2/2] hwmon: Add Eswin EIC7700 PVT sensor driver dongxuyang
2026-06-30  9:36   ` sashiko-bot
2026-07-01  2:53   ` Guenter Roeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260630091040.1407-1-dongxuyang@eswincomputing.com \
    --to=dongxuyang@eswincomputing.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=linmin@eswincomputing.com \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=luyulin@eswincomputing.com \
    --cc=ningyu@eswincomputing.com \
    --cc=p.zabel@pengutronix.de \
    --cc=pinkesh.vaghela@einfochips.com \
    --cc=robh@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox