Skip to content

Commit

Permalink
r8169: add support for the temperature sensor being available from RT…
Browse files Browse the repository at this point in the history
…L8125B

This adds support for the temperature sensor being available from
RTL8125B. Register information was taken from r8125 vendor driver.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
hkallweit authored and davem330 committed Oct 9, 2024
1 parent 2a80d89 commit 1ffcc8d
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions drivers/net/ethernet/realtek/r8169_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/ethtool.h>
#include <linux/hwmon.h>
#include <linux/phy.h>
#include <linux/if_vlan.h>
#include <linux/in.h>
Expand Down Expand Up @@ -5363,6 +5364,43 @@ static bool rtl_aspm_is_safe(struct rtl8169_private *tp)
return false;
}

static umode_t r8169_hwmon_is_visible(const void *drvdata,
enum hwmon_sensor_types type,
u32 attr, int channel)
{
return 0444;
}

static int r8169_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
u32 attr, int channel, long *val)
{
struct rtl8169_private *tp = dev_get_drvdata(dev);
int val_raw;

val_raw = phy_read_paged(tp->phydev, 0xbd8, 0x12) & 0x3ff;
if (val_raw >= 512)
val_raw -= 1024;

*val = 1000 * val_raw / 2;

return 0;
}

static const struct hwmon_ops r8169_hwmon_ops = {
.is_visible = r8169_hwmon_is_visible,
.read = r8169_hwmon_read,
};

static const struct hwmon_channel_info * const r8169_hwmon_info[] = {
HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT),
NULL
};

static const struct hwmon_chip_info r8169_hwmon_chip_info = {
.ops = &r8169_hwmon_ops,
.info = r8169_hwmon_info,
};

static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
{
struct rtl8169_private *tp;
Expand Down Expand Up @@ -5537,6 +5575,12 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
if (rc)
return rc;

/* The temperature sensor is available from RTl8125B */
if (IS_REACHABLE(CONFIG_HWMON) && tp->mac_version >= RTL_GIGA_MAC_VER_63)
/* ignore errors */
devm_hwmon_device_register_with_info(&pdev->dev, "nic_temp", tp,
&r8169_hwmon_chip_info,
NULL);
rc = register_netdev(dev);
if (rc)
return rc;
Expand Down

0 comments on commit 1ffcc8d

Please sign in to comment.