r8169: add support for the temperature sensor being available from RTL8125B
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>
This commit is contained in:
parent
2a80d89256
commit
1ffcc8d413
1 changed files with 44 additions and 0 deletions
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/ethtool.h>
|
#include <linux/ethtool.h>
|
||||||
|
#include <linux/hwmon.h>
|
||||||
#include <linux/phy.h>
|
#include <linux/phy.h>
|
||||||
#include <linux/if_vlan.h>
|
#include <linux/if_vlan.h>
|
||||||
#include <linux/in.h>
|
#include <linux/in.h>
|
||||||
|
@ -5363,6 +5364,43 @@ static bool rtl_aspm_is_safe(struct rtl8169_private *tp)
|
||||||
return false;
|
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)
|
static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
{
|
{
|
||||||
struct rtl8169_private *tp;
|
struct rtl8169_private *tp;
|
||||||
|
@ -5537,6 +5575,12 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
if (rc)
|
if (rc)
|
||||||
return 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);
|
rc = register_netdev(dev);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
Loading…
Add table
Reference in a new issue