mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-06 13:55:22 +02:00
mt76: mt7615: add thermal sensor device support
Similar to mt7915, switching to use standard hwmon sysfs. For reading temperature, cat /sys/class/ieee80211/phy*/hwmon*/temp1_input Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
34b877d972
commit
109e505ad9
|
@ -319,24 +319,6 @@ mt7615_radio_read(struct seq_file *s, void *data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mt7615_read_temperature(struct seq_file *s, void *data)
|
|
||||||
{
|
|
||||||
struct mt7615_dev *dev = dev_get_drvdata(s->private);
|
|
||||||
int temp;
|
|
||||||
|
|
||||||
if (!mt7615_wait_for_mcu_init(dev))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* cpu */
|
|
||||||
mt7615_mutex_acquire(dev);
|
|
||||||
temp = mt7615_mcu_get_temperature(dev, 0);
|
|
||||||
mt7615_mutex_release(dev);
|
|
||||||
|
|
||||||
seq_printf(s, "Temperature: %d\n", temp);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mt7615_queues_acq(struct seq_file *s, void *data)
|
mt7615_queues_acq(struct seq_file *s, void *data)
|
||||||
{
|
{
|
||||||
|
@ -566,8 +548,6 @@ int mt7615_init_debugfs(struct mt7615_dev *dev)
|
||||||
|
|
||||||
debugfs_create_file("reset_test", 0200, dir, dev,
|
debugfs_create_file("reset_test", 0200, dir, dev,
|
||||||
&fops_reset_test);
|
&fops_reset_test);
|
||||||
debugfs_create_devm_seqfile(dev->mt76.dev, "temperature", dir,
|
|
||||||
mt7615_read_temperature);
|
|
||||||
debugfs_create_file("ext_mac_addr", 0600, dir, dev, &fops_ext_mac_addr);
|
debugfs_create_file("ext_mac_addr", 0600, dir, dev, &fops_ext_mac_addr);
|
||||||
|
|
||||||
debugfs_create_u32("rf_wfidx", 0600, dir, &dev->debugfs_rf_wf);
|
debugfs_create_u32("rf_wfidx", 0600, dir, &dev->debugfs_rf_wf);
|
||||||
|
|
|
@ -8,11 +8,61 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
|
#include <linux/hwmon.h>
|
||||||
|
#include <linux/hwmon-sysfs.h>
|
||||||
#include "mt7615.h"
|
#include "mt7615.h"
|
||||||
#include "mac.h"
|
#include "mac.h"
|
||||||
#include "mcu.h"
|
#include "mcu.h"
|
||||||
#include "eeprom.h"
|
#include "eeprom.h"
|
||||||
|
|
||||||
|
static ssize_t mt7615_thermal_show_temp(struct device *dev,
|
||||||
|
struct device_attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct mt7615_dev *mdev = dev_get_drvdata(dev);
|
||||||
|
int temperature;
|
||||||
|
|
||||||
|
if (!mt7615_wait_for_mcu_init(mdev))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
mt7615_mutex_acquire(mdev);
|
||||||
|
temperature = mt7615_mcu_get_temperature(mdev);
|
||||||
|
mt7615_mutex_release(mdev);
|
||||||
|
|
||||||
|
if (temperature < 0)
|
||||||
|
return temperature;
|
||||||
|
|
||||||
|
/* display in millidegree celcius */
|
||||||
|
return sprintf(buf, "%u\n", temperature * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static SENSOR_DEVICE_ATTR(temp1_input, 0444, mt7615_thermal_show_temp,
|
||||||
|
NULL, 0);
|
||||||
|
|
||||||
|
static struct attribute *mt7615_hwmon_attrs[] = {
|
||||||
|
&sensor_dev_attr_temp1_input.dev_attr.attr,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
ATTRIBUTE_GROUPS(mt7615_hwmon);
|
||||||
|
|
||||||
|
int mt7615_thermal_init(struct mt7615_dev *dev)
|
||||||
|
{
|
||||||
|
struct wiphy *wiphy = mt76_hw(dev)->wiphy;
|
||||||
|
struct device *hwmon;
|
||||||
|
|
||||||
|
if (!IS_REACHABLE(CONFIG_HWMON))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
hwmon = devm_hwmon_device_register_with_groups(&wiphy->dev,
|
||||||
|
wiphy_name(wiphy), dev,
|
||||||
|
mt7615_hwmon_groups);
|
||||||
|
if (IS_ERR(hwmon))
|
||||||
|
return PTR_ERR(hwmon);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(mt7615_thermal_init);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mt7615_phy_init(struct mt7615_dev *dev)
|
mt7615_phy_init(struct mt7615_dev *dev)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2350,14 +2350,12 @@ int mt7615_mcu_set_chan_info(struct mt7615_phy *phy, int cmd)
|
||||||
return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), true);
|
return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
int mt7615_mcu_get_temperature(struct mt7615_dev *dev, int index)
|
int mt7615_mcu_get_temperature(struct mt7615_dev *dev)
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
u8 action;
|
u8 action;
|
||||||
u8 rsv[3];
|
u8 rsv[3];
|
||||||
} req = {
|
} req = {};
|
||||||
.action = index,
|
|
||||||
};
|
|
||||||
|
|
||||||
return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_GET_TEMP, &req,
|
return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_GET_TEMP, &req,
|
||||||
sizeof(req), true);
|
sizeof(req), true);
|
||||||
|
|
|
@ -360,6 +360,7 @@ static inline int mt7622_wmac_init(struct mt7615_dev *dev)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int mt7615_thermal_init(struct mt7615_dev *dev);
|
||||||
int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base,
|
int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base,
|
||||||
int irq, const u32 *map);
|
int irq, const u32 *map);
|
||||||
u32 mt7615_reg_map(struct mt7615_dev *dev, u32 addr);
|
u32 mt7615_reg_map(struct mt7615_dev *dev, u32 addr);
|
||||||
|
@ -498,7 +499,7 @@ u32 mt7615_rf_rr(struct mt7615_dev *dev, u32 wf, u32 reg);
|
||||||
int mt7615_rf_wr(struct mt7615_dev *dev, u32 wf, u32 reg, u32 val);
|
int mt7615_rf_wr(struct mt7615_dev *dev, u32 wf, u32 reg, u32 val);
|
||||||
int mt7615_mcu_set_dbdc(struct mt7615_dev *dev);
|
int mt7615_mcu_set_dbdc(struct mt7615_dev *dev);
|
||||||
int mt7615_mcu_set_eeprom(struct mt7615_dev *dev);
|
int mt7615_mcu_set_eeprom(struct mt7615_dev *dev);
|
||||||
int mt7615_mcu_get_temperature(struct mt7615_dev *dev, int index);
|
int mt7615_mcu_get_temperature(struct mt7615_dev *dev);
|
||||||
int mt7615_mcu_set_tx_power(struct mt7615_phy *phy);
|
int mt7615_mcu_set_tx_power(struct mt7615_phy *phy);
|
||||||
void mt7615_mcu_exit(struct mt7615_dev *dev);
|
void mt7615_mcu_exit(struct mt7615_dev *dev);
|
||||||
void mt7615_mcu_fill_msg(struct mt7615_dev *dev, struct sk_buff *skb,
|
void mt7615_mcu_fill_msg(struct mt7615_dev *dev, struct sk_buff *skb,
|
||||||
|
|
|
@ -152,6 +152,10 @@ int mt7615_register_device(struct mt7615_dev *dev)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = mt7615_thermal_init(dev);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
ieee80211_queue_work(mt76_hw(dev), &dev->mcu_work);
|
ieee80211_queue_work(mt76_hw(dev), &dev->mcu_work);
|
||||||
mt7615_init_txpower(dev, &dev->mphy.sband_2g.sband);
|
mt7615_init_txpower(dev, &dev->mphy.sband_2g.sband);
|
||||||
mt7615_init_txpower(dev, &dev->mphy.sband_5g.sband);
|
mt7615_init_txpower(dev, &dev->mphy.sband_5g.sband);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user