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;
|
||||
}
|
||||
|
||||
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
|
||||
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,
|
||||
&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_u32("rf_wfidx", 0600, dir, &dev->debugfs_rf_wf);
|
||||
|
|
|
@ -8,11 +8,61 @@
|
|||
*/
|
||||
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/hwmon-sysfs.h>
|
||||
#include "mt7615.h"
|
||||
#include "mac.h"
|
||||
#include "mcu.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
|
||||
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);
|
||||
}
|
||||
|
||||
int mt7615_mcu_get_temperature(struct mt7615_dev *dev, int index)
|
||||
int mt7615_mcu_get_temperature(struct mt7615_dev *dev)
|
||||
{
|
||||
struct {
|
||||
u8 action;
|
||||
u8 rsv[3];
|
||||
} req = {
|
||||
.action = index,
|
||||
};
|
||||
} req = {};
|
||||
|
||||
return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_GET_TEMP, &req,
|
||||
sizeof(req), true);
|
||||
|
|
|
@ -360,6 +360,7 @@ static inline int mt7622_wmac_init(struct mt7615_dev *dev)
|
|||
}
|
||||
#endif
|
||||
|
||||
int mt7615_thermal_init(struct mt7615_dev *dev);
|
||||
int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base,
|
||||
int irq, const u32 *map);
|
||||
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_mcu_set_dbdc(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);
|
||||
void mt7615_mcu_exit(struct mt7615_dev *dev);
|
||||
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)
|
||||
return ret;
|
||||
|
||||
ret = mt7615_thermal_init(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
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_5g.sband);
|
||||
|
|
Loading…
Reference in New Issue
Block a user