From 08ac6aa14f50a73a3b37274f6e23953f952cd9eb Mon Sep 17 00:00:00 2001 From: inspectorgadget03 Date: Wed, 4 Jan 2023 20:52:38 +0300 Subject: [PATCH] Added akmod based rpm specs for fedora --- .tmp/nct6687d-1.0.62.tar.gz | Bin 0 -> 15575 bytes .tmp/nct6687d-1.0.62/nct6687d/LICENSE | 339 +++++ .tmp/nct6687d-1.0.62/nct6687d/Makefile | 78 + .tmp/nct6687d-1.0.62/nct6687d/nct6687.c | 1264 +++++++++++++++++ .../nct6687d-1.0.62-gitf59feef.noarch.rpm | Bin 0 -> 6870 bytes ...kmod-nct6687d-1.0.62-gitf59feef.x86_64.rpm | Bin 0 -> 26313 bytes ...kmod-nct6687d-1.0.62-gitf59feef.x86_64.rpm | Bin 0 -> 6681 bytes .tmp/rpmbuild/SOURCES/nct6687.conf | 1 + .tmp/rpmbuild/SOURCES/nct6687d-1.0.62.tar.gz | Bin 0 -> 15575 bytes .tmp/rpmbuild/SPECS/nct6687d-kmod.spec | 57 + .tmp/rpmbuild/SPECS/nct6687d.spec | 35 + .../SRPMS/nct6687d-1.0.62-gitf59feef.src.rpm | Bin 0 -> 7541 bytes .../nct6687d-kmod-1.0.62-gitf59feef.src.rpm | Bin 0 -> 26548 bytes Makefile | 33 +- README.md | 57 +- fedora/nct6687d-kmod.spec | 57 + fedora/nct6687d.spec | 35 + 17 files changed, 1925 insertions(+), 31 deletions(-) create mode 100644 .tmp/nct6687d-1.0.62.tar.gz create mode 100644 .tmp/nct6687d-1.0.62/nct6687d/LICENSE create mode 100644 .tmp/nct6687d-1.0.62/nct6687d/Makefile create mode 100644 .tmp/nct6687d-1.0.62/nct6687d/nct6687.c create mode 100644 .tmp/rpmbuild/RPMS/noarch/nct6687d-1.0.62-gitf59feef.noarch.rpm create mode 100644 .tmp/rpmbuild/RPMS/x86_64/akmod-nct6687d-1.0.62-gitf59feef.x86_64.rpm create mode 100644 .tmp/rpmbuild/RPMS/x86_64/kmod-nct6687d-1.0.62-gitf59feef.x86_64.rpm create mode 100644 .tmp/rpmbuild/SOURCES/nct6687.conf create mode 100644 .tmp/rpmbuild/SOURCES/nct6687d-1.0.62.tar.gz create mode 100644 .tmp/rpmbuild/SPECS/nct6687d-kmod.spec create mode 100644 .tmp/rpmbuild/SPECS/nct6687d.spec create mode 100644 .tmp/rpmbuild/SRPMS/nct6687d-1.0.62-gitf59feef.src.rpm create mode 100644 .tmp/rpmbuild/SRPMS/nct6687d-kmod-1.0.62-gitf59feef.src.rpm create mode 100644 fedora/nct6687d-kmod.spec create mode 100644 fedora/nct6687d.spec diff --git a/.tmp/nct6687d-1.0.62.tar.gz b/.tmp/nct6687d-1.0.62.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7e92180c43a373f3a164883712794cbd22653057 GIT binary patch literal 15575 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 lK6jtH&)w(lbN9LX+ + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/.tmp/nct6687d-1.0.62/nct6687d/Makefile b/.tmp/nct6687d-1.0.62/nct6687d/Makefile new file mode 100644 index 0000000..e90b60a --- /dev/null +++ b/.tmp/nct6687d-1.0.62/nct6687d/Makefile @@ -0,0 +1,78 @@ +obj-m += nct6687.o + +curpwd := $(shell pwd) +kver := $(shell uname -r) +commitcount := $(shell git rev-list --all --count) +commithash := $(shell git rev-parse --short HEAD) + + +build: + rm -rf ${curpwd}/${kver} + mkdir -p ${curpwd}/${kver} + cp ${curpwd}/Makefile ${curpwd}/nct6687.c ${curpwd}/${kver} + cd ${curpwd}/${kver} + make -C /lib/modules/${kver}/build M=${curpwd}/${kver} modules + +install: build + sudo cp ${curpwd}/${kver}/nct6687.ko /lib/modules/${kver}/kernel/drivers/hwmon/ + sudo depmod + sudo modprobe nct6687 + +clean: + [ -d "${curpwd}/${kver}" ] && make -C /lib/modules/${kver}/build M=${curpwd}/${kver} clean + + + + +akmod/build: + sudo dnf groupinstall -y "Development Tools" + sudo dnf install -y rpmdevtools kmodtool + mkdir -p ${curpwd}/.tmp/nct6687d-1.0.${commitcount}/nct6687d + cp LICENSE Makefile nct6687.c ${curpwd}/.tmp/nct6687d-1.0.${commitcount}/nct6687d + cd .tmp && tar -czvf nct6687d-1.0.${commitcount}.tar.gz nct6687d-1.0.${commitcount} && cd - + mkdir -p ${curpwd}/.tmp/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} + cp ${curpwd}/.tmp/nct6687d-1.0.${commitcount}.tar.gz ${curpwd}/.tmp/rpmbuild/SOURCES/ + echo 'nct6687' | tee ${curpwd}/.tmp/rpmbuild/SOURCES/nct6687.conf + cp fedora/*.spec ${curpwd}/.tmp/rpmbuild/SPECS/ + sed -i "s/MAKEFILE_PKGVER/${commitcount}/g" ${curpwd}/.tmp/rpmbuild/SPECS/* + sed -i "s/MAKEFILE_COMMITHASH/${commithash}/g" ${curpwd}/.tmp/rpmbuild/SPECS/* + rpmbuild -ba --define "_topdir ${curpwd}/.tmp/rpmbuild" ${curpwd}/.tmp/rpmbuild/SPECS/nct6687d.spec + rpmbuild -ba --define "_topdir ${curpwd}/.tmp/rpmbuild" ${curpwd}/.tmp/rpmbuild/SPECS/nct6687d-kmod.spec + +akmod/install: akmod/build + sudo dnf install ${curpwd}/.tmp/rpmbuild/RPMS/*/*.rpm + +akmod/clean: + sudo dnf remove nct6687d + +akmod: akmod/install + + + +dkms/build: + make -C /lib/modules/${kver}/build M=${curpwd} modules + +dkms/install: + rm -rf ${curpwd}/dkms + mkdir -p ${curpwd}/dkms + cp ${curpwd}/dkms.conf ${curpwd}/Makefile ${curpwd}/nct6687.c ${curpwd}/dkms + sudo rm -rf /usr/src/nct6687d-1 + sudo cp -rT dkms /usr/src/nct6687d-1 + sudo dkms install nct6687d/1 + sudo modprobe nct6687 + +dkms/clean: + sudo dkms remove nct6687d/1 --all + make -C /lib/modules/${kver}/build M=${curpwd} clean + +debian/changelog: FORCE + git --no-pager log \ + --format='nct6687d-dkms (%ad) unstable; urgency=low%n%n * %s%n%n -- %aN <%aE> %aD%n' \ + --date='format:%Y%m%d-%H%M%S' \ + > $@ + +deb: debian/changelog + dpkg-buildpackage -b -rfakeroot -us -uc + +.PHONY: FORCE +FORCE: diff --git a/.tmp/nct6687d-1.0.62/nct6687d/nct6687.c b/.tmp/nct6687d-1.0.62/nct6687d/nct6687.c new file mode 100644 index 0000000..3a6385b --- /dev/null +++ b/.tmp/nct6687d-1.0.62/nct6687d/nct6687.c @@ -0,0 +1,1264 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * nct6687 - Driver for the hardware monitoring functionality of + * Nuvoton NCT6687 Super-I/O chips + * + * Copyright (C) 2020 Frederic Boltz + * + * Derived from nct6683 driver + * Copyright (C) 2013 Guenter Roeck + * + * Inspired of LibreHardwareMonitor + * https://github.com/LibreHardwareMonitor/LibreHardwareMonitor + * + * Supports the following chips: + * + * Chip #voltage #fan #pwm #temp chip ID + * nct6683 14(1) 8 8 7 0xc732 (partial support) + * nct6687 14(1) 8 8 7 0xd592 + * + * Notes: + * (1) Total number of voltage and 9 displayed. + */ +// #define DEBUG 1 +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + +enum kinds +{ + nct6683, + nct6687 +}; + +static bool force; +static bool manual; + +module_param(force, bool, 0); +MODULE_PARM_DESC(force, "Set to one to enable support for unknown vendors"); + +module_param(manual, bool, 0); +MODULE_PARM_DESC(manual, "Set voltage input and voltage label configured with external sensors file"); + +static const char *const nct6687_device_names[] = { + "nct6683", + "nct6687", +}; + +static const char *const nct6687_chip_names[] = { + "NCT6683D", + "NCT6687D", +}; + +#define DRVNAME "nct6687" + +/* + * Super-I/O constants and functions + */ + +#define NCT6687_LD_ACPI 0x0a +#define NCT6687_LD_HWM 0x0b +#define NCT6687_LD_VID 0x0d + +#define SIO_REG_LDSEL 0x07 /* Logical device select */ +#define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */ +#define SIO_REG_DEVREVISION 0x21 /* Device ID (2 bytes) */ +#define SIO_REG_ENABLE 0x30 /* Logical device enable */ +#define SIO_REG_ADDR 0x60 /* Logical device address (2 bytes) */ + +#define SIO_NCT6683D_ID 0xc732 +#define SIO_NCT6687_ID 0xd451 // 0xd592 +#define SIO_NCT6687D_ID 0xd592 + +static inline void superio_outb(int ioreg, int reg, int val) +{ + outb(reg, ioreg); + outb(val, ioreg + 1); +} + +static inline int superio_inb(int ioreg, int reg) +{ + outb(reg, ioreg); + + return inb(ioreg + 1); +} + +static inline void superio_select(int ioreg, int ld) +{ + outb(SIO_REG_LDSEL, ioreg); + outb(ld, ioreg + 1); +} + +static inline int superio_enter(int ioreg) +{ + /* + * Try to reserve and for exclusive access. + */ + if (!request_muxed_region(ioreg, 2, DRVNAME)) + return -EBUSY; + + outb(0x87, ioreg); + outb(0x87, ioreg); + + return 0; +} + +static inline void superio_exit(int ioreg) +{ + outb(0xaa, ioreg); + outb(0x02, ioreg); + outb(0x02, ioreg + 1); + + release_region(ioreg, 2); +} + +/* + * ISA constants + */ + +#define IOREGION_OFFSET 0 /* Use EC port 1 */ +#define IOREGION_LENGTH 4 + +/* Common and NCT6687 specific data */ + +#define NCT6687_NUM_REG_VOLTAGE (sizeof(nct6687_voltage_definition) / sizeof(struct voltage_reg)) +#define NCT6687_NUM_REG_TEMP 7 +#define NCT6687_NUM_REG_FAN 8 +#define NCT6687_NUM_REG_PWM 8 + +#define NCT6687_REG_TEMP(x) (0x100 + (x)*2) +#define NCT6687_REG_VOLTAGE(x) (0x120 + (x)*2) +#define NCT6687_REG_FAN_RPM(x) (0x140 + (x)*2) +#define NCT6687_REG_PWM(x) (0x160 + (x)) +#define NCT6687_REG_PWM_WRITE(x) (0xa28 + (x)) + +#define NCT6687_HWM_CFG 0x180 + +#define NCT6687_REG_MON_CFG(x) (0x1a0 + (x)) +#define NCT6687_REG_FANIN_CFG(x) (0xA00 + (x)) +#define NCT6687_REG_FANOUT_CFG(x) (0x1d0 + (x)) + +#define NCT6687_REG_TEMP_HYST(x) (0x330 + (x)) /* 8 bit */ +#define NCT6687_REG_TEMP_MAX(x) (0x350 + (x)) /* 8 bit */ +#define NCT6687_REG_MON_HIGH(x) (0x370 + (x)*2) /* 8 bit */ +#define NCT6687_REG_MON_LOW(x) (0x371 + (x)*2) /* 8 bit */ + +#define NCT6687_REG_FAN_MIN(x) (0x3b8 + (x)*2) /* 16 bit */ + +#define NCT6687_REG_FAN_CTRL_MODE(x) 0xA00 +#define NCT6687_REG_FAN_PWM_COMMAND(x) 0xA01 +#define NCT6687_FAN_CFG_REQ 0x80 +#define NCT6687_FAN_CFG_DONE 0x40 + +#define NCT6687_REG_BUILD_YEAR 0x604 +#define NCT6687_REG_BUILD_MONTH 0x605 +#define NCT6687_REG_BUILD_DAY 0x606 +#define NCT6687_REG_SERIAL 0x607 +#define NCT6687_REG_VERSION_HI 0x608 +#define NCT6687_REG_VERSION_LO 0x609 + +#define NCT6687_REG_CR_CASEOPEN 0xe8 +#define NCT6687_CR_CASEOPEN_MASK (1 << 7) + +#define NCT6687_REG_CR_BEEP 0xe0 +#define NCT6687_CR_BEEP_MASK (1 << 6) + +#define EC_SPACE_PAGE_REGISTER_OFFSET 0x04 +#define EC_SPACE_INDEX_REGISTER_OFFSET 0x05 +#define EC_SPACE_DATA_REGISTER_OFFSET 0x06 +#define EC_SPACE_PAGE_SELECT 0xFF + +struct voltage_reg +{ + u16 reg; + u16 multiplier; + const char *label; +}; + +static struct voltage_reg nct6687_voltage_definition[] = { + // +12V + { + .reg = 0, + .multiplier = 12, + .label = "+12V", + }, + // + 5V + { + .reg = 1, + .multiplier = 5, + .label = "+5V", + }, + // +3.3V + { + .reg = 11, + .multiplier = 1, + .label = "+3.3V", + }, + // CPU SOC + { + .reg = 2, + .multiplier = 1, + .label = "CPU Soc", + }, + // CPU Vcore + { + .reg = 4, + .multiplier = 1, + .label = "CPU Vcore", + }, + // CPU 1P8 + { + .reg = 9, + .multiplier = 1, + .label = "CPU 1P8", + }, + // CPU VDDP + { + .reg = 10, + .multiplier = 1, + .label = "CPU VDDP", + }, + // DRAM + { + .reg = 3, + .multiplier = 2, + .label = "DRAM", + }, + // Chipset + { + .reg = 5, + .multiplier = 1, + .label = "Chipset", + }, + + // CPU SA + { + .reg = 6, + .multiplier = 1, + .label = "CPU SA", + }, + // Voltage #2 + { + .reg = 7, + .multiplier = 1, + .label = "Voltage #2", + }, + // AVCC3 + { + .reg = 8, + .multiplier = 1, + .label = "AVCC3", + }, + // AVSB + { + .reg = 12, + .multiplier = 1, + .label = "AVSB", + }, + // VBAT + { + .reg = 13, + .multiplier = 1, + .label = "VBat", + }, + +}; + +static const char *const nct6687_temp_label[] = { + "CPU", + "System", + "VRM MOS", + "PCH", + "CPU Socket", + "PCIe x1", + "M2_1", + NULL, +}; + +static const char *const nct6687_fan_label[] = { + "CPU Fan", + "Pump Fan", + "System Fan #1", + "System Fan #2", + "System Fan #3", + "System Fan #4", + "System Fan #5", + "System Fan #6", + NULL, +}; + +/* ------------------------------------------------------- */ +struct nct6687_data +{ + int addr; /* IO base of EC space */ + int sioreg; /* SIO register */ + enum kinds kind; + + struct device *hwmon_dev; + const struct attribute_group *groups[6]; + + struct mutex update_lock; /* used to protect sensor updates */ + bool valid; /* true if following fields are valid */ + unsigned long last_updated; /* In jiffies */ + + /* Voltage values */ + s16 voltage[3][NCT6687_NUM_REG_VOLTAGE]; // 0 = current 1 = min 2 = max + + /* Temperature values */ + s32 temperature[3][NCT6687_NUM_REG_TEMP]; // 0 = current 1 = min 2 = max + + /* Fan attribute values */ + u16 rpm[3][NCT6687_NUM_REG_FAN]; // 0 = current 1 = min 2 = max + u8 _initialFanControlMode[NCT6687_NUM_REG_FAN]; + u8 _initialFanPwmCommand[NCT6687_NUM_REG_FAN]; + bool _restoreDefaultFanControlRequired[NCT6687_NUM_REG_FAN]; + + u8 pwm[NCT6687_NUM_REG_PWM]; + + /* Remember extra register values over suspend/resume */ + u8 hwm_cfg; +}; + +struct nct6687_sio_data +{ + int sioreg; + enum kinds kind; +}; + +struct sensor_device_template +{ + struct device_attribute dev_attr; + union + { + struct + { + u8 nr; + u8 index; + } s; + int index; + } u; + bool s2; /* true if both index and nr are used */ +}; + +struct sensor_device_attr_u +{ + union + { + struct sensor_device_attribute a1; + struct sensor_device_attribute_2 a2; + } u; + char name[32]; +}; + +#define __TEMPLATE_ATTR(_template, _mode, _show, _store) \ + { \ + .attr = {.name = _template, .mode = _mode}, \ + .show = _show, \ + .store = _store, \ + } + +#define SENSOR_DEVICE_TEMPLATE(_template, _mode, _show, _store, _index) \ + { \ + .dev_attr = __TEMPLATE_ATTR(_template, _mode, _show, _store), \ + .u.index = _index, \ + .s2 = false \ + } + +#define SENSOR_DEVICE_TEMPLATE_2(_template, _mode, _show, _store, \ + _nr, _index) \ + { \ + .dev_attr = __TEMPLATE_ATTR(_template, _mode, _show, _store), \ + .u.s.index = _index, \ + .u.s.nr = _nr, \ + .s2 = true \ + } + +#define SENSOR_TEMPLATE(_name, _template, _mode, _show, _store, _index) \ + static struct sensor_device_template sensor_dev_template_##_name = SENSOR_DEVICE_TEMPLATE(_template, _mode, _show, _store, \ + _index) + +#define SENSOR_TEMPLATE_2(_name, _template, _mode, _show, _store, \ + _nr, _index) \ + static struct sensor_device_template sensor_dev_template_##_name = SENSOR_DEVICE_TEMPLATE_2(_template, _mode, _show, _store, \ + _nr, _index) + +struct sensor_template_group +{ + struct sensor_device_template **templates; + umode_t (*is_visible)(struct kobject *, struct attribute *, int); + int base; +}; + +static void nct6687_save_fan_control(struct nct6687_data *data, int index); + +static const char* nct6687_voltage_label(char* buf, int index) +{ + if (manual) + sprintf(buf, "in%d", index); + else + strcpy(buf, nct6687_voltage_definition[index].label); + + return buf; +} + +static struct attribute_group *nct6687_create_attr_group(struct device *dev, const struct sensor_template_group *tg, int repeat) +{ + struct sensor_device_attribute_2 *a2; + struct sensor_device_attribute *a; + struct sensor_device_template **t; + struct sensor_device_attr_u *su; + struct attribute_group *group; + struct attribute **attrs; + int i, j, count; + + if (repeat <= 0) + return ERR_PTR(-EINVAL); + + t = tg->templates; + for (count = 0; *t; t++, count++) + ; + + if (count == 0) + return ERR_PTR(-EINVAL); + + group = devm_kzalloc(dev, sizeof(*group), GFP_KERNEL); + if (group == NULL) + return ERR_PTR(-ENOMEM); + + attrs = devm_kcalloc(dev, repeat * count + 1, sizeof(*attrs), GFP_KERNEL); + if (attrs == NULL) + return ERR_PTR(-ENOMEM); + + su = devm_kzalloc(dev, array3_size(repeat, count, sizeof(*su)), GFP_KERNEL); + if (su == NULL) + return ERR_PTR(-ENOMEM); + + group->attrs = attrs; + group->is_visible = tg->is_visible; + + for (i = 0; i < repeat; i++) + { + t = tg->templates; + + for (j = 0; *t != NULL; j++) + { + snprintf(su->name, sizeof(su->name), (*t)->dev_attr.attr.name, tg->base + i); + + if ((*t)->s2) + { + a2 = &su->u.a2; + sysfs_attr_init(&a2->dev_attr.attr); + a2->dev_attr.attr.name = su->name; + a2->nr = (*t)->u.s.nr + i; + a2->index = (*t)->u.s.index; + a2->dev_attr.attr.mode = (*t)->dev_attr.attr.mode; + a2->dev_attr.show = (*t)->dev_attr.show; + a2->dev_attr.store = (*t)->dev_attr.store; + *attrs = &a2->dev_attr.attr; + } + else + { + a = &su->u.a1; + sysfs_attr_init(&a->dev_attr.attr); + a->dev_attr.attr.name = su->name; + a->index = (*t)->u.index + i; + a->dev_attr.attr.mode = (*t)->dev_attr.attr.mode; + a->dev_attr.show = (*t)->dev_attr.show; + a->dev_attr.store = (*t)->dev_attr.store; + *attrs = &a->dev_attr.attr; + } + attrs++; + su++; + t++; + } + } + + return group; +} + +static u16 nct6687_read(struct nct6687_data *data, u16 address) +{ + u8 page = (u8)(address >> 8); + u8 index = (u8)(address & 0xFF); + int res; + + outb_p(EC_SPACE_PAGE_SELECT, data->addr + EC_SPACE_PAGE_REGISTER_OFFSET); + outb_p(page, data->addr + EC_SPACE_PAGE_REGISTER_OFFSET); + outb_p(index, data->addr + EC_SPACE_INDEX_REGISTER_OFFSET); + + res = inb_p(data->addr + EC_SPACE_DATA_REGISTER_OFFSET); + + return res; +} + +static u16 nct6687_read16(struct nct6687_data *data, u16 reg) +{ + return (nct6687_read(data, reg) << 8) | nct6687_read(data, reg + 1); +} + +static void nct6687_write(struct nct6687_data *data, u16 address, u16 value) +{ + u8 page = (u8)(address >> 8); + u8 index = (u8)(address & 0xFF); + + outb_p(EC_SPACE_PAGE_SELECT, data->addr + EC_SPACE_PAGE_REGISTER_OFFSET); + outb_p(page, data->addr + EC_SPACE_PAGE_REGISTER_OFFSET); + outb_p(index, data->addr + EC_SPACE_INDEX_REGISTER_OFFSET); + outb_p(value, data->addr + EC_SPACE_DATA_REGISTER_OFFSET); +} + +static void nct6687_update_temperatures(struct nct6687_data *data) +{ + int i; + + for (i = 0; i < NCT6687_NUM_REG_TEMP; i++) + { + s32 value = (char)nct6687_read(data, NCT6687_REG_TEMP(i)); + s32 half = (nct6687_read(data, NCT6687_REG_TEMP(i) + 1) >> 7) & 0x1; + s32 temperature = (value * 1000) + (500 * half); + + data->temperature[0][i] = temperature; + data->temperature[1][i] = MIN(temperature, data->temperature[1][i]); + data->temperature[2][i] = MAX(temperature, data->temperature[2][i]); + + pr_debug("nct6687_update_temperatures[%d]], addr=%04X, value=%d, half=%d, temperature=%d\n", i, NCT6687_REG_TEMP(i), value, half, temperature); + } +} + +static void nct6687_update_voltage(struct nct6687_data *data) +{ + int index; + char buf[128]; + + /* Measured voltages and limits */ + for (index = 0; index < NCT6687_NUM_REG_VOLTAGE; index++) + { + s16 reg = manual ? index : nct6687_voltage_definition[index].reg; + s16 high = nct6687_read(data, NCT6687_REG_VOLTAGE(reg)) * 16; + s16 low = ((u16)nct6687_read(data, NCT6687_REG_VOLTAGE(reg) + 1)) >> 4; + s16 value = low + high; + s16 voltage = manual ? value : value * nct6687_voltage_definition[index].multiplier; + + data->voltage[0][index] = voltage; + data->voltage[1][index] = MIN(voltage, data->voltage[1][index]); + data->voltage[2][index] = MAX(voltage, data->voltage[2][index]); + + pr_debug("nct6687_update_voltage[%d], %s, reg=%d, addr=0x%04x, value=%d, voltage=%d\n", index, nct6687_voltage_label(buf, index), reg, NCT6687_REG_VOLTAGE(index), value, voltage); + } + + pr_debug("nct6687_update_voltage\n"); +} + +static void nct6687_update_fans(struct nct6687_data *data) +{ + int i; + + for (i = 0; i < NCT6687_NUM_REG_FAN; i++) + { + s16 rmp = nct6687_read16(data, NCT6687_REG_FAN_RPM(i)); + + data->rpm[0][i] = rmp; + data->rpm[1][i] = MIN(rmp, data->rpm[1][i]); + data->rpm[2][i] = MAX(rmp, data->rpm[2][i]); + + pr_debug("nct6687_update_fans[%d], rpm=%d min=%d, max=%d", i, rmp, data->rpm[1][i], data->rpm[2][i]); + } + + for (i = 0; i < NCT6687_NUM_REG_PWM; i++) + { + data->pwm[i] = nct6687_read(data, NCT6687_REG_PWM(i)); + + pr_debug("nct6687_update_fans[%d], pwm=%d", i, data->pwm[i]); + } +} + +static struct nct6687_data *nct6687_update_device(struct device *dev) +{ + struct nct6687_data *data = dev_get_drvdata(dev); + + mutex_lock(&data->update_lock); + + if (time_after(jiffies, data->last_updated + HZ) || !data->valid) + { + /* Measured voltages and limits */ + nct6687_update_voltage(data); + + /* Measured temperatures and limits */ + nct6687_update_temperatures(data); + + /* Measured fan speeds and limits */ + nct6687_update_fans(data); + + data->last_updated = jiffies; + data->valid = true; + } + + mutex_unlock(&data->update_lock); + + return data; +} + +/* + * Sysfs callback functions + */ +static ssize_t show_voltage_label(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct sensor_device_attribute *sattr = to_sensor_dev_attr(attr); + + if (manual) + return sprintf(buf, "in%d\n", sattr->index); + else + return sprintf(buf, "%s\n", nct6687_voltage_definition[sattr->index].label); +} + +static ssize_t show_voltage_value(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); + struct nct6687_data *data = nct6687_update_device(dev); + + return sprintf(buf, "%d\n", data->voltage[sattr->index][sattr->nr]); +} + +static umode_t nct6687_voltage_is_visible(struct kobject *kobj, struct attribute *attr, int index) +{ + pr_debug("nct6687_voltage_is_visible[%d], attr=0x%04X\n", index, attr->mode); + return attr->mode; +} + +SENSOR_TEMPLATE(voltage_label, "in%d_label", S_IRUGO, show_voltage_label, NULL, 0); +SENSOR_TEMPLATE_2(voltage_input, "in%d_input", S_IRUGO, show_voltage_value, NULL, 0, 0); +SENSOR_TEMPLATE_2(voltage_min, "in%d_min", S_IRUGO, show_voltage_value, NULL, 0, 1); +SENSOR_TEMPLATE_2(voltage_max, "in%d_max", S_IRUGO, show_voltage_value, NULL, 0, 2); + +static struct sensor_device_template *nct6687_attributes_voltage_template[] = { + &sensor_dev_template_voltage_label, + &sensor_dev_template_voltage_input, + &sensor_dev_template_voltage_min, + &sensor_dev_template_voltage_max, + NULL, +}; + +static const struct sensor_template_group nct6687_voltage_template_group = { + .templates = nct6687_attributes_voltage_template, + .is_visible = nct6687_voltage_is_visible, +}; + +static ssize_t show_fan_label(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct sensor_device_attribute *sattr = to_sensor_dev_attr(attr); + + return sprintf(buf, "%s\n", nct6687_fan_label[sattr->index]); +} + +static ssize_t show_fan_value(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); + struct nct6687_data *data = nct6687_update_device(dev); + + return sprintf(buf, "%d\n", data->rpm[sattr->index][sattr->nr]); +} + +static umode_t nct6687_fan_is_visible(struct kobject *kobj, struct attribute *attr, int index) +{ + return attr->mode; +} + +SENSOR_TEMPLATE(fan_label, "fan%d_label", S_IRUGO, show_fan_label, NULL, 0); +SENSOR_TEMPLATE_2(fan_input, "fan%d_input", S_IRUGO, show_fan_value, NULL, 0, 0); +SENSOR_TEMPLATE_2(fan_min, "fan%d_min", S_IRUGO, show_fan_value, NULL, 0, 1); +SENSOR_TEMPLATE_2(fan_max, "fan%d_max", S_IRUGO, show_fan_value, NULL, 0, 2); + +/* + * nct6687_fan_is_visible uses the index into the following array + * to determine if attributes should be created or not. + * Any change in order or content must be matched. + */ +static struct sensor_device_template *nct6687_attributes_fan_template[] = { + &sensor_dev_template_fan_label, + &sensor_dev_template_fan_input, + &sensor_dev_template_fan_min, + &sensor_dev_template_fan_max, + NULL, +}; + +static const struct sensor_template_group nct6687_fan_template_group = { + .templates = nct6687_attributes_fan_template, + .is_visible = nct6687_fan_is_visible, + .base = 1, +}; + +static ssize_t show_temperature_label(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct sensor_device_attribute *sattr = to_sensor_dev_attr(attr); + + return sprintf(buf, "%s\n", nct6687_temp_label[sattr->index]); +} + +static ssize_t show_temperature_value(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); + struct nct6687_data *data = nct6687_update_device(dev); + + return sprintf(buf, "%d\n", data->temperature[sattr->index][sattr->nr]); +} + +static umode_t nct6687_temp_is_visible(struct kobject *kobj, struct attribute *attr, int index) +{ + return attr->mode; +} + +SENSOR_TEMPLATE(temp_label, "temp%d_label", S_IRUGO, show_temperature_label, NULL, 0); +SENSOR_TEMPLATE_2(temp_input, "temp%d_input", S_IRUGO, show_temperature_value, NULL, 0, 0); +SENSOR_TEMPLATE_2(temp_min, "temp%d_min", S_IRUGO, show_temperature_value, NULL, 0, 1); +SENSOR_TEMPLATE_2(temp_max, "temp%d_max", S_IRUGO, show_temperature_value, NULL, 0, 2); + +/* + * nct6687_temp_is_visible uses the index into the following array + * to determine if attributes should be created or not. + * Any change in order or content must be matched. + */ +static struct sensor_device_template *nct6687_attributes_temp_template[] = { + &sensor_dev_template_temp_input, + &sensor_dev_template_temp_label, + &sensor_dev_template_temp_min, + &sensor_dev_template_temp_max, + NULL, +}; + +static const struct sensor_template_group nct6687_temp_template_group = { + .templates = nct6687_attributes_temp_template, + .is_visible = nct6687_temp_is_visible, + .base = 1, +}; + +static ssize_t show_pwm(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct nct6687_data *data = nct6687_update_device(dev); + struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); + int index = sattr->index; + + return sprintf(buf, "%d\n", data->pwm[index]); +} + +static ssize_t store_pwm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); + struct nct6687_data *data = dev_get_drvdata(dev); + int index = sattr->index; + unsigned long val; + u16 mode; + u8 bitMask; + + if (kstrtoul(buf, 10, &val) || val > 255 || index >= NCT6687_NUM_REG_FAN) + return -EINVAL; + + mutex_lock(&data->update_lock); + + nct6687_save_fan_control(data, index); + + mode = nct6687_read(data, NCT6687_REG_FAN_CTRL_MODE(index)); + bitMask = (u8)(0x01 << index); + + mode = (u8)(mode | bitMask); + nct6687_write(data, NCT6687_REG_FAN_CTRL_MODE(index), mode); + + nct6687_write(data, NCT6687_REG_FAN_PWM_COMMAND(index), NCT6687_FAN_CFG_REQ); + msleep(50); + nct6687_write(data, NCT6687_REG_PWM_WRITE(index), val); + nct6687_write(data, NCT6687_REG_FAN_PWM_COMMAND(index), NCT6687_FAN_CFG_DONE); + msleep(50); + + mutex_unlock(&data->update_lock); + + return count; +} + +SENSOR_TEMPLATE(pwm, "pwm%d", S_IRUGO, show_pwm, store_pwm, 0); + +static void nct6687_save_fan_control(struct nct6687_data *data, int index) +{ + if (data->_restoreDefaultFanControlRequired[index] == false) + { + u16 reg = nct6687_read(data, NCT6687_REG_FAN_CTRL_MODE(index)); + u16 bitMask = 0x01 << index; + u8 pwm = nct6687_read(data, NCT6687_REG_FAN_PWM_COMMAND(index)); + + data->_initialFanControlMode[index] = (u8)(reg & bitMask); + data->_initialFanPwmCommand[index] = pwm; + + data->_restoreDefaultFanControlRequired[index] = true; + } +} + +static void nct6687_restore_fan_control(struct nct6687_data *data, int index) +{ + if (data->_restoreDefaultFanControlRequired[index]) + { + u8 mode = nct6687_read(data, NCT6687_REG_FAN_CTRL_MODE(index)); + mode = (u8)(mode & ~data->_initialFanControlMode[index]); + + nct6687_write(data, NCT6687_REG_FAN_CTRL_MODE(index), mode); + + nct6687_write(data, NCT6687_REG_FAN_PWM_COMMAND(index), NCT6687_FAN_CFG_REQ); + msleep(50); + nct6687_write(data, NCT6687_REG_PWM_WRITE(index), data->_initialFanPwmCommand[index]); + nct6687_write(data, NCT6687_REG_FAN_PWM_COMMAND(index), NCT6687_FAN_CFG_DONE); + msleep(50); + + data->_restoreDefaultFanControlRequired[index] = false; + + pr_debug("nct6687_restore_fan_control[%d], addr=%04X, ctrl=%04X, _initialFanPwmCommand=%d\n", index, NCT6687_REG_FAN_PWM_COMMAND(index), NCT6687_REG_PWM_WRITE(index), data->_initialFanPwmCommand[index]); + } +} + +static umode_t nct6687_pwm_is_visible(struct kobject *kobj, struct attribute *attr, int index) +{ + return attr->mode | S_IWUSR; +} + +static struct sensor_device_template *nct6687_attributes_pwm_template[] = { + &sensor_dev_template_pwm, + NULL, +}; + +static const struct sensor_template_group nct6687_pwm_template_group = { + .templates = nct6687_attributes_pwm_template, + .is_visible = nct6687_pwm_is_visible, + .base = 1, +}; + +/* Get the monitoring functions started */ +static inline void nct6687_init_device(struct nct6687_data *data) +{ + u8 tmp; + + pr_debug("nct6687_init_device\n"); + + /* Start hardware monitoring if needed */ + tmp = nct6687_read(data, NCT6687_HWM_CFG); + if (!(tmp & 0x80)) + { + pr_debug("nct6687_init_device: 0x%04x\n", tmp); + nct6687_write(data, NCT6687_HWM_CFG, tmp | 0x80); + } + + // enable SIO voltage + nct6687_write(data, 0x1BB, 0x61); + nct6687_write(data, 0x1BC, 0x62); + nct6687_write(data, 0x1BD, 0x63); + nct6687_write(data, 0x1BE, 0x64); + nct6687_write(data, 0x1BF, 0x65); +} + +/* + * There are a total of 8 fan inputs. + */ +static void nct6687_setup_fans(struct nct6687_data *data) +{ + int i; + + for (i = 0; i < NCT6687_NUM_REG_FAN; i++) + { + u16 reg = nct6687_read(data, NCT6687_REG_FAN_CTRL_MODE(i)); + u16 bitMask = 0x01 << i; + u16 rpm = nct6687_read16(data, NCT6687_REG_FAN_RPM(i)); + + data->rpm[0][i] = rpm; + data->rpm[1][i] = rpm; + data->rpm[2][i] = rpm; + data->_initialFanControlMode[i] = (u8)(reg & bitMask); + data->_restoreDefaultFanControlRequired[i] = false; + + pr_debug("nct6687_setup_fans[%d], %s - addr=%04X, ctrl=%04X, rpm=%d, _initialFanControlMode=%d\n", i, nct6687_fan_label[i], NCT6687_REG_FAN_CTRL_MODE(i), reg, rpm, data->_initialFanControlMode[i]); + } +} + +static void nct6687_setup_voltages(struct nct6687_data *data) +{ + int index; + char buf[64]; + + /* Measured voltages and limits */ + for (index = 0; index < NCT6687_NUM_REG_VOLTAGE; index++) + { + s16 reg = manual ? index : nct6687_voltage_definition[index].reg; + s16 high = nct6687_read(data, NCT6687_REG_VOLTAGE(reg)) * 16; + s16 low = ((u16)nct6687_read(data, NCT6687_REG_VOLTAGE(reg) + 1)) >> 4; + s16 value = low + high; + s16 voltage = manual ? value : value * nct6687_voltage_definition[index].multiplier; + + data->voltage[0][index] = voltage; + data->voltage[1][index] = voltage; + data->voltage[2][index] = voltage; + + pr_debug("nct6687_setup_voltages[%d], %s, addr=0x%04x, value=%d, voltage=%d\n", index, nct6687_voltage_label(buf, index), NCT6687_REG_VOLTAGE(index), value, voltage); + } +} + +static void nct6687_setup_temperatures(struct nct6687_data *data) +{ + int i; + + for (i = 0; i < NCT6687_NUM_REG_TEMP; i++) + { + s32 value = (char)nct6687_read(data, NCT6687_REG_TEMP(i)); + s32 half = (nct6687_read(data, NCT6687_REG_TEMP(i) + 1) >> 7) & 0x1; + s32 temperature = (value * 1000) + (5 * half); + + data->temperature[0][i] = temperature; + data->temperature[1][i] = temperature; + data->temperature[2][i] = temperature; + + pr_debug("nct6687_setup_temperatures[%d]], addr=%04X, value=%d, half=%d, temperature=%d\n", i, NCT6687_REG_TEMP(i), value, half, temperature); + } +} + +static void nct6687_setup_pwm(struct nct6687_data *data) +{ + int i; + + for (i = 0; i < NCT6687_NUM_REG_PWM; i++) + { + data->_initialFanPwmCommand[i] = nct6687_read(data, NCT6687_REG_FAN_PWM_COMMAND(i)); + data->pwm[i] = nct6687_read(data, NCT6687_REG_PWM(i)); + + pr_debug("nct6687_setup_pwm[%d], addr=%04X, pwm=%d, _initialFanPwmCommand=%d\n", i, NCT6687_REG_FAN_PWM_COMMAND(i), data->pwm[i], data->_initialFanPwmCommand[i]); + } +} + +static int nct6687_remove(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct nct6687_data *data = dev_get_drvdata(dev); + int i; + + mutex_lock(&data->update_lock); + + for (i = 0; i < NCT6687_NUM_REG_FAN; i++) + { + nct6687_restore_fan_control(data, i); + } + + mutex_unlock(&data->update_lock); + + return 0; +} + +static int nct6687_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct nct6687_sio_data *sio_data = dev->platform_data; + struct attribute_group *group; + struct nct6687_data *data; + struct device *hwmon_dev; + struct resource *res; + int groups = 0; + char build[16]; + + res = platform_get_resource(pdev, IORESOURCE_IO, 0); + if (!devm_request_region(dev, res->start, IOREGION_LENGTH, DRVNAME)) + return -EBUSY; + + data = devm_kzalloc(dev, sizeof(struct nct6687_data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + data->kind = sio_data->kind; + data->sioreg = sio_data->sioreg; + data->addr = res->start; + + pr_debug("nct6687_probe addr=0x%04X, sioreg=0x%04X\n", data->addr, data->sioreg); + + mutex_init(&data->update_lock); + + platform_set_drvdata(pdev, data); + + nct6687_init_device(data); + nct6687_setup_fans(data); + nct6687_setup_pwm(data); + nct6687_setup_temperatures(data); + nct6687_setup_voltages(data); + + /* Register sysfs hooks */ + + group = nct6687_create_attr_group(dev, &nct6687_pwm_template_group, NCT6687_NUM_REG_FAN); + + if (IS_ERR(group)) + return PTR_ERR(group); + + data->groups[groups++] = group; + + group = nct6687_create_attr_group(dev, &nct6687_voltage_template_group, NCT6687_NUM_REG_VOLTAGE); + + if (IS_ERR(group)) + return PTR_ERR(group); + + data->groups[groups++] = group; + + group = nct6687_create_attr_group(dev, &nct6687_fan_template_group, NCT6687_NUM_REG_FAN); + + if (IS_ERR(group)) + return PTR_ERR(group); + + data->groups[groups++] = group; + + group = nct6687_create_attr_group(dev, &nct6687_temp_template_group, NCT6687_NUM_REG_TEMP); + + if (IS_ERR(group)) + return PTR_ERR(group); + + data->groups[groups++] = group; + + scnprintf(build, sizeof(build), "%02d/%02d/%02d", nct6687_read(data, NCT6687_REG_BUILD_MONTH), nct6687_read(data, NCT6687_REG_BUILD_DAY), nct6687_read(data, NCT6687_REG_BUILD_YEAR)); + + dev_info(dev, "%s EC firmware version %d.%d build %s\n", nct6687_chip_names[data->kind], nct6687_read(data, NCT6687_REG_VERSION_HI), nct6687_read(data, NCT6687_REG_VERSION_LO), build); + + hwmon_dev = devm_hwmon_device_register_with_groups(dev, nct6687_device_names[data->kind], data, data->groups); + + return PTR_ERR_OR_ZERO(hwmon_dev); +} + +static int nct6687_suspend(struct platform_device *pdev, pm_message_t state) +{ + struct nct6687_data *data = nct6687_update_device(&pdev->dev); + + mutex_lock(&data->update_lock); + data->hwm_cfg = nct6687_read(data, NCT6687_HWM_CFG); + mutex_unlock(&data->update_lock); + + return 0; +} + +static int nct6687_resume(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct nct6687_data *data = dev_get_drvdata(dev); + + mutex_lock(&data->update_lock); + + nct6687_write(data, NCT6687_HWM_CFG, data->hwm_cfg); + + /* Force re-reading all values */ + data->valid = false; + mutex_unlock(&data->update_lock); + + return 0; +} + +// static const struct dev_pm_ops nct6687_dev_pm_ops = { +// .suspend = nct6687_suspend, +// .resume = nct6687_resume, +// .freeze = nct6687_suspend, +// .restore = nct6687_resume, +// }; + +#define NCT6687_DEV_PM_OPS NULL + +static struct platform_driver nct6687_driver = { + .driver = { + .name = DRVNAME, + .pm = NCT6687_DEV_PM_OPS, + }, + .probe = nct6687_probe, + .remove = nct6687_remove, + .suspend = nct6687_suspend, + .resume = nct6687_resume, +}; + +static int __init nct6687_find(int sioaddr, struct nct6687_sio_data *sio_data) +{ + u16 address; + u16 verify; + u16 val; + int err; + + err = superio_enter(sioaddr); + if (err) + return err; + + val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) | superio_inb(sioaddr, SIO_REG_DEVREVISION); + + pr_debug("found chip ID: 0x%04x\n", val); + + if (val == SIO_NCT6683D_ID) { + sio_data->kind = nct6683; + } else if (val == SIO_NCT6687_ID || val == SIO_NCT6687D_ID || force) + { + sio_data->kind = nct6687; + } + else + { + if (val != 0xffff) + pr_debug("unsupported chip ID: 0x%04x\n", val); + goto fail; + } + + /* We have a known chip, find the HWM I/O address */ + superio_select(sioaddr, NCT6687_LD_HWM); + address = (superio_inb(sioaddr, SIO_REG_ADDR) << 8) | superio_inb(sioaddr, SIO_REG_ADDR + 1); + ssleep(1); + verify = (superio_inb(sioaddr, SIO_REG_ADDR) << 8) | superio_inb(sioaddr, SIO_REG_ADDR + 1); + + if (address == 0 || address != verify) + { + pr_err("EC base I/O port unconfigured\n"); + goto fail; + } + + if ((address & 0x07) == 0x05) + address &= 0xFFF8; + + if (address < 0x100 || (address & 0xF007) != 0) + { + pr_err("EC Invalid address: 0x%04X\n", address); + goto fail; + } + + /* Activate logical device if needed */ + val = superio_inb(sioaddr, SIO_REG_ENABLE); + if (!(val & 0x01)) + { + pr_warn("Forcibly enabling EC access. Data may be unusable.\n"); + superio_outb(sioaddr, SIO_REG_ENABLE, val | 0x01); + } + + superio_exit(sioaddr); + pr_info("Found %s or compatible chip at 0x%04x:0x%04x\n", nct6687_chip_names[sio_data->kind], sioaddr, address); + sio_data->sioreg = sioaddr; + + return address; + +fail: + superio_exit(sioaddr); + return -ENODEV; +} + +/* + * when Super-I/O functions move to a separate file, the Super-I/O + * bus will manage the lifetime of the device and this module will only keep + * track of the nct6687 driver. But since we use platform_device_alloc(), we + * must keep track of the device + */ +static struct platform_device *pdev[2]; + +static int __init sensors_nct6687_init(void) +{ + struct nct6687_sio_data sio_data; + int sioaddr[2] = {0x2e, 0x4e}; + struct resource res; + bool found = false; + int address; + int i, err; + + err = platform_driver_register(&nct6687_driver); + if (err) + return err; + + /* + * initialize sio_data->kind and sio_data->sioreg. + * + * when Super-I/O functions move to a separate file, the Super-I/O + * driver will probe 0x2e and 0x4e and auto-detect the presence of a + * nct6687 hardware monitor, and call probe() + */ + for (i = 0; i < ARRAY_SIZE(pdev); i++) + { + address = nct6687_find(sioaddr[i], &sio_data); + if (address <= 0) + continue; + + found = true; + + pdev[i] = platform_device_alloc(DRVNAME, address); + if (!pdev[i]) + { + err = -ENOMEM; + goto exit_device_unregister; + } + + err = platform_device_add_data(pdev[i], &sio_data, sizeof(struct nct6687_sio_data)); + if (err) + goto exit_device_put; + + memset(&res, 0, sizeof(res)); + + res.name = DRVNAME; + res.start = address + IOREGION_OFFSET; + res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1; + res.flags = IORESOURCE_IO; + + err = acpi_check_resource_conflict(&res); + if (err) + { + platform_device_put(pdev[i]); + pdev[i] = NULL; + continue; + } + + err = platform_device_add_resources(pdev[i], &res, 1); + if (err) + goto exit_device_put; + + /* platform_device_add calls probe() */ + err = platform_device_add(pdev[i]); + if (err) + goto exit_device_put; + } + + if (!found) + { + err = -ENODEV; + goto exit_unregister; + } + + return 0; + +exit_device_put: + platform_device_put(pdev[i]); + +exit_device_unregister: + while (--i >= 0) + { + if (pdev[i]) + platform_device_unregister(pdev[i]); + } + +exit_unregister: + platform_driver_unregister(&nct6687_driver); + + return err; +} + +static void __exit sensors_nct6687_exit(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(pdev); i++) + { + if (pdev[i]) + platform_device_unregister(pdev[i]); + } + + platform_driver_unregister(&nct6687_driver); +} + +MODULE_AUTHOR("Frederic Boltz "); +MODULE_DESCRIPTION("Driver for NCT6687D"); +MODULE_LICENSE("GPL"); + +module_init(sensors_nct6687_init); +module_exit(sensors_nct6687_exit); diff --git a/.tmp/rpmbuild/RPMS/noarch/nct6687d-1.0.62-gitf59feef.noarch.rpm b/.tmp/rpmbuild/RPMS/noarch/nct6687d-1.0.62-gitf59feef.noarch.rpm new file mode 100644 index 0000000000000000000000000000000000000000..f9605da01426399570275fc36c8e30f6755b0733 GIT binary patch literal 6870 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 literal 0 HcmV?d00001 diff --git a/.tmp/rpmbuild/RPMS/x86_64/kmod-nct6687d-1.0.62-gitf59feef.x86_64.rpm b/.tmp/rpmbuild/RPMS/x86_64/kmod-nct6687d-1.0.62-gitf59feef.x86_64.rpm new file mode 100644 index 0000000000000000000000000000000000000000..947cc3b6ec4932ae273920c62d31b601e87294f0 GIT binary patch literal 6681 zcmeHMO>7iZ9DmEUQc)uY6Y(n*b%|M|WD$NRtE z`%kv{@Ac1a{8%NpD$AWDps`_)>Q%@AjJCwTLc*V<81S$D1}XG!VZguo zJEYK`hgxwA7Z(pK$8&v$g|2}Q_f$i5T-{=Z>u@zR9E~`-Z@Gr12MyEYAq#n^F=p$k zsRgFSRL!?F(+at&F~e3}*Y{P^QB58M4bHp`fj$F$2Ko&28R#?6XQ0nOpMgFDeFpjr{NEYq_C(g#*Drtw^fUm|1EK=hXby_GvR*<68=@e2j&M(L&CpmN-Xvz>@PwJ`=EyhAD5U*Eb7EZEvHsvONZ9ZB8dBI#O8gTf@)?|wSk#cPzaX)w5261^ z;4!kL|3`ZLKeDO+cY+rzW&Sd2a%H6z`7Nc$0COdZm5sKcvdpuXw-vM!%QjcSBvWF( z!t+8Z$YLvkL#{BTgK+e2yr^g;Wuc^Ot(~wy#?KSPNXsluaxR>TM9KK;Wt4HHXz^Y5 zUvxMh>8=Zlt!wY!1^*6P=1N{7!dg-)O4N8?&^_`aR9oTAul}EbVMNlr2Xzj8N1vN4DC~xg+D-X7WzDZDy6nTQlfxZ3soQ zYx7`R)+5NL9eKlJNhi&Cp7UTLYV#S^;rYmhPRtyOnmF)(=jM86DpdI-dxOtqJd9TF zx=8g@ekL!15m|Se`_2YB(I(Z1S+i?Tzy zDAFk93Vn^W+qm;AOR`bCr5yyzxnE{cv4;6{KRvcIF+0CFHF0`rVfN(w*!U=x@68{d zo;o^q>eSMag@tig%+4$*RJ;rMXuZs{I!dIDN~weU7AvHnEtUm5<^lD64XNe@*rsWg z6v#cvXkKJVjGP}BhsAN?MR7NbLOYhJ;9it5A8jJMIC~nhd@c4{2$+;PE#s9a4rswV zl;7Qz{Wi;68|#BHDEx2}CVmUig`ySI~T#_<)gkHKe`N6es&wh9Q zCH}0ak+KM>Ll|QL(_L;e*Jqw(8k`%xZ*tBZ+u}?&Rs720*|x`4eRT7F5-Fj@a6g)(t5r^zEt6_YWVXO=Z{QHkI(Phw@;W?$^P?uotr!NR{jC7 CtVlip literal 0 HcmV?d00001 diff --git a/.tmp/rpmbuild/SOURCES/nct6687.conf b/.tmp/rpmbuild/SOURCES/nct6687.conf new file mode 100644 index 0000000..164b458 --- /dev/null +++ b/.tmp/rpmbuild/SOURCES/nct6687.conf @@ -0,0 +1 @@ +nct6687 diff --git a/.tmp/rpmbuild/SOURCES/nct6687d-1.0.62.tar.gz b/.tmp/rpmbuild/SOURCES/nct6687d-1.0.62.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7e92180c43a373f3a164883712794cbd22653057 GIT binary patch literal 15575 zcmV;|JSf8-iwFP!000001MEC&SKG$6{c8V;DJiK<{5G#b;MB1VcohTJCTVhWvb1DN z1_fF2(Stx+{`=i~&x|a|Bio^A*S+@~uLYK7_G|WQ_B_BD2fMrbdq%llsa19x)$jg- zPYphMJ3IJY-`lChzvbt<`gU_?r`g=DZSQ_pt2dfE+uyOBze1SwC-ei|W9++$X}F%A z4Y#WQ|LDg_*Ni{QR5S-yMA}PuZ&@CJbM3^Z9Y;&Au3nJ_kqahk}1=+BSo>V*c*l z^cY*{3mtuGva(mqkKO6i3dU~e1aW{HD`1{^U$!kjVCAw7P31B{Nt9dNzhx?vneO>O zyX@b(Uck<}txhqY&yPaOHV*PRZwhQD?1$gE)KAqPen%Of^111qVR@`PQ}vDGt+uw*m#{j+A z)G+S@gkVS-pOg+z38u4ZBIiNh++!o%8ssA9y>|Cv*kzG}sNCXfNE!^GQH7Xv%H!Ye zCu|971)wT7zbyknT0pj(JzCHWDZ2Xmo4395PHAw}AC`ufZwKuzd|!3j@EhCGQL$=V zQn)O3f(1C9Ilgt-kAl>X><<>0=1R0k)vhxk$#?>;ZdLr5xuE|!It~b(-2|mrY{Rei zTfcNqdgop3>X*}Z-9a^Fotupnw6>JQ+L!%)@A|AYJc|fo0$Y!sY+>b*4vEbG=WPHFY>+;n+B@+=jF2z)X{mQ`O9piKpIrG;~Je(ToK!{KceXr_! z<5+yoCycUp%@Ab?6m?6BL?vH6b6OxpB#nU-Qr4)}`ON;+3KtWDVU8@_sg7@T=LXXL z%>g^Pgj|r%VI@#5J1&$0H&A{+7yD;Emn)Yit~b?#qaULIl30aJ-6%py0>c~G<{=Bc z8`Bv-9@*}fO=r_#Y>RFB^i(dhP5pws-qgFt3?4h1&X0n$p$F#CkDS55=7-JcrcvHJ z+w5-+Im9vh;b#*0fTiWm=Zx9iO_|0y)5mupGz1|U4%FhgE(|90;Riyea&>lj@j(uh zejnuj&iXI2{*N5-&+}MX|JQ5vT`2Zb^?$ut|4;q@cYLZ1qM!zwcOYuj?dho3!sf!M7$W`MLA{`4GwW`O`OICgH0Jo8Mbq0hB| zFt52$Ab3m~6VJ#lTwW~gA&)qzwNya?^SxCdQe=7GnF z?oiY0%apzY6N*s6WWCPZq)qIsZx`xCPGX-WzxVi8?P0vvY%o@Ug;`+fHuJe;#kg~< zNy*sxsUc*)a08PDl0&p>7v?7Bgwqii0W>Q|qdNxsi5ZqZv-L;Qr~rI54^I3-)Hj{( zo42Q|o|o@4Pn%4G0{j%&FH`_){mafptKVfC2W*2uM?U|;a>jOOn8MCgeLS-&x5o?Z zh6zkn9j520nk_J(vfWj+ezqnMcfP8NmT;LJW&hEiDDn8ztLzB_^Fh@CdJS;a(_ldb zIY9;D+xiIGBPI8H7X`gEDzZYMpch{kM#bVk;Nbut=0L6YF`(llP~HSnvpdT%{QU3v zobbnzeA>%D9p>|psRIc55iIU7=Zww6MAKAvLfr;9K57lzQ=b+HutX3gRx2Ln!TfJ= zHP9OLwN7`~mJl05Ghl(sT#yyMOb3ex>D!d!Lg&tLzc}pPbYL#_v-Hz6jMFOWHy`2Z=&!H9!g4H7Uc9!U(L2SD%x2yB?qw)nHq zpRlHe+cf^iPwa?+mN$f&H%ig-9y~v-Ll2WjiW<-3%?^A?m(hLg~<8Cr$CSB2=W?)bE|#TgG^G>Rh?(Q_OWlI>U-DgV4pFkI_zC)gYGGG z4!h^rx0lPY>J~e9Z>%w>ohuQvZ=2%)4SiHD?&kl z@TPl=JZfUESRI<5(!7w0WMw%jP8kefb!Y~m=P<%r#v(Bs?n-GkwlU|D@X7RmY~w4& zLj}#86|unG2#CIG?-6qzSlskrLHC*fjwt|NNA!;=37QWu7x+**F?~D+52+x5YCdO8 zSmArm{8woDfi?{vOhW@ah}?o0SfeDPAM$-ps;dn1_3#7gj|NnG*xySJGT9a>y0%KU z=7SZahAZgl`XY~7V@aD(FY<<^s&A%;##PTVS#Q{y=dfhf>Ro~*A;`7Mlapchn$cQ$H&%dyOxob8FTuB0fP;_{bXS080&2ew zde>4Ay|FLB7vN!@(%L7dkOAxaHMIu%;0XXCdFxAg!(BVu^1GXJ8NU22F`k?XA*O7ZYj17?)l}f5o$d`O|Z>$ z5G-*8?r1;3w!XU(xqUr2$7Kh30vRI{6rBe5mRlDc30z+QCYmRwfb?GgvA;-70(34f zur}Dva4EhX`p|9hLSTCd5a9)1uRjZB5fYUBg>kY5FgJ=?Xh$%h-?Ok-b?^Uoni?E&6bxQ@hn;`)d65TdJ zoSfhUn$GSxQHJ2v@Oa3drlB2JGutvfXo#-~Xqj>tUok9_W7(68TslBy_^RG`m(Rg- zu7Ws6tX9J3IcI39H>i!TjgHs`;^1QAsl-XJog|6+B8i<8g`EU}W~G^;pde9CkwByv zk@nSFHoR;n$TU_`AuM;CqVsMH^+kfx_F9w(FGZ_pkMU4-GI554sGZqR4_%OO2qwa@5VM9m$yCp7m=_E4wienX>&i?`?JYi?;wbZ1cv zcA`6+csQL!FI+BsWiRRrEscei=0eN%Ld(uV%WiT2P-~Q*_rc;sB<5&82$l+%=y837 zYyCqkgL;>21gjg|Z-o_!Khwu1U)$j-lGZwhSnb_GP-z4fQy6 zgKh@q)THAG^C9r`c?1Y8xp)-jhp-rTj4Fr`PI>SEVeo!!Jh_pDQX&u`t`fm0;!F`# zF=X!Qa#I)0j|X%}A`y4m+?3EjZ>U%YN-v((IW#=r3rgxB06hUq^8sI;n2%qyks{ij zSSS_lHz*!tRE^x=mV?m_h2v3JQKW({GDm=tX(1J!Y2g%*d_;Qva3zq|V0t4Gn36v3 zS$}LcJ{>0Zr8NqY^VW4&Yh7Ot3Xx7rOq+s}!k2&Re!(wvuOeOn_?7N|LjKsnA*OcuQXOk(g-WuHIIaZ>!>j;hmRR;qT9at+_9`wu+~_uVkr;*FwODi zYG1wA zh&4xT+KU&ONI%aF^SS?}K1_})Q$gtBYpUo^ex#6Wy%_oPpTE*3>tu#ZtK{MeNKeF( z2vmQ^Dv1o~x3=UXRtF(Uq6Mt5W%=5@M<;^ZEW zuKbw?-ID?VZdlHyu~CY+<$Ln70hYnZtvn<>zwQp;GA(&K90LT zo{JXvpS%EpLr~%&3tqhvJYKy*l9H1ETg`}%=?E=2)$V@NVYxakkQv3f93L)BsHZ1a z+ArO~MfaQn3781nBZj*NNIlr26CJOiEcCM+dyL2oVIeyALv z?s@uSQ$t?DGD4Me{(e|gaz~15u_hIjkLBp4e~9LJ8WZN8Hy|<@+~UTz*lVFFcqUup z;zi*m&`NlprIWDlxul2eGxrf%h53$1FMe1)=5wSxh!qVm@WNJ5EFa4wi@G6zC;TNQ z0jcSjqU%|T&d~FEYF<<$f1hjmd3yXBH9l91nMx#(SFfnS55+^kzn`f5mH{pj|9rm0 z?J7Ap!qjLis}&GdTz8`B4tIiZBM-z6_lpI26YBVw?HBpJRHW;8|4TYhlckKuBOWi3 zXtRRq{H;XSH6Q~4KG9(jL9&?_WN%fS!?4_^0+><^~yU$`WdC@;TwR$#8_C;Wvr{=SLJ{C{v1iA-9_ zLeB7%43mf*|Je4npKYL`+(ETeGqh??JU(CJHaba;Ho|p4QQ<=i7m}H7sT+Q(VfZC^z79L>5+76X~ zbpeQ1TVn0fbPJ$GHJOGa(|W&(Ohb?XIy0>7N8wFjV~MdpZW^CHl_=kw^YcZwH1vW=b;Ni%gRyd(pyRGAYqI{w4W?094tT*=M8A9LGeY(#r z$ni_gwl%c^e$K-ERwN7bU3y&fUvYLM0OoGYlO-Lx;BuAyLr^$aV-d>F9f-!Qb#u#( zRC!c&(T=VJqL=PUe4Ez_1xS;t0x3>}!h+&rTT+rii4-1MP$DqkA=(ZXfa)=0YtzF570X-YR8Y{o0Q!lT*QyRT{>MT!43Lr7qVP6OfGt z5oeUn=Sn|GQRVwgifyy_7TBVv@%;op~jfF`ZGgkiO$o;*;bTI+Le0a7o-ng2cMUW-HtB#kpI6e>@VMAYfxbY#XGv ztHn4McdaSg6Fsqg5Zk_1B5nGFvSe0`Q=9K<$0AXsIhrN@YR%y`b++!bhSc8DP*>*+ z8SrYIaWyAr@`Re?o8x^-=t>@{q}4s&id;Bh!3WhT3s+b2Ok**>E;8V07O{ER@IGE3 zaH&y9RGS$5ype{IJ{L^{i*Q5!0(6I3Z}9f?vZRQs5^a?7zo}e2N{j@@zoV2?=_Qk@ zs7wUaRfJ*Ilw{#?ZKCz%MD>S=sQ$1v(MIe@YsGPjG;HJveneFQ$-9m(RmYJ@6RZH@ z%3lG5id+Q(YRSB}x%BKR?Z>HZ8fPWikdKA)68(TEmBe8{cCaMGO(eSLX6gTq>0zDR zKEDi`$W__N91;F~5;>N|&r0H`rf-zM*UPw(Az=vcoSAN8aLZCH$uH6@C#TM{kvpu+ zu?WfYE2pPQuqtZm%9g@>sx_@DN! z{kd)ANbj%4UooqytfdVtOMdOHwd*=cqHHFzq>z#wCzbL+Bq$*!2^JofnY!HHe*Ja# z37>FNIZF*C@iofISi>CH))4=(N57oV*OFuWUSfs!*;6j&+! z?G&$i{KZn=AJ1(hzW?4*XE%)d%I&(qQmqsYY1f-_@EyhN7xLD{j^e3%qizj^MgQNodVYT4Ghb&DuihWp!ce zZO|91>TS>)wK@HNr#N_gH_{v)OROrfQn|RPU-|rtwMS)8w^1LJ7nkaf8c*Czfy}NZ zUrmbMTKs)2@#|z1l2$wsc{2ga{@fL+2MHygO($Z#QK7!B0yJYGSy+Rn6( zIPpq0X-n2l!Dkt~4zmx|6ZnDJ&q;U)eYZ(yeTRc`;7q1}%?tDB=~H}>_Fnwb6d$Ra z*upuAH}h~W&E2(Wx|*VUPt%dEi4Rl{Q;@eoE*-JWuh{yu#hdUKs^_Qt_y1Tb;q__? z$jzE<8TEYK>~;TK2U|hIaSrIsBpXN3Z2jrhO}bVdGUCPDZaSu$bP7jE)O&R+|GMVc zHb4Rf*2mbc)7ub35Xle(qn*Y6s%;aT1Kqk)&gMcY4#>6ZGHcMi?TGKyjdhM+K zXueDuElQj3%>UkC8f3n{P#Aq}X;c+QpCON~XQ3Nad|P={6Ii!rPG0CsBGCtgJ)+jCHU(FaLjY|^#?ODIqu&?D7)(84{BjW>Vko2vpa#DRwo?U9){nVU zdAzDfhl@N}Rpfw+JoV2aJiUx)W-vP;nJ73>IT@KBIUj?~@~q+tsNyPGz_VX7&FXW( z(@NlEAEmQ8YWm##t=XhGe{12vqoxPT^!@da>v~0XosueN&}IUf2TK%`B!{(@oY3K= z)h>nykt()owlqtST4>NvRhq0!!Cf^*5` zmcIAhWAV(2-NqaF?Gf;LLb@I#kUe<825YN+s`)jC!k46LJ_DhFJdMW!d@It+Yk^M! zuuVL8fg{!sYtiYFA9n0hIh3vP+?~@VUwNbBFWyL-Eor$|twa%jZ0Uh-etvCPqy0N8 zPrnzomp$XnOz-9{^H#1*oy)9m@(<|4dyDqNl1ES#%}<*41l(JK+kwz!M(ecguY@ttQ#y(&fAT_nlr(4$kmd@#M7UJt+A_kExV@e*0T! z9$m7x?`w0u>SBKtApT4Ac`@7SUzffOvHiu)0z3UGz0C$w7vGL?VTXz?{uV%RO!2P!Jl;>XefWYKkmK%Q>S;l?wZ|LhCuYd(3Kd3(C6em^(12<0ncw9eP(V) z30iKnMNQdT&o8~P7x!yGGdV%^p964jli9G+zg!`oRdNToZ;X(_0}zqZzs6(#s9p70 z=%zOH@ZFxK4wEJSm$Tx^E+aP>;`NpRCvkugx8&jKJ$o(RHlXy3YS(sAM34d!f@kd1D$JJW`tASow`76mS*AZ9Phri{m^|H%kQvQ8@wvAo8<22S8vLbIig9la>TU+{Jn%gYrJ8rbJiufuJk z9BY7JGrlXcge+}h)Q&q-<+Wr=GyH)TIH$j-*mAFLDed&0=1sF(K;=!TqASj+uVcdZ z;vFJ8;3`68ob-;GtJO;3h79;di1}w66yKnX^#a!Sz8_^B-t;D1?i8~9Llvz~5w!tS zvi0dvgb4nV=9i5jX~-al@b+{}C2>@&KDC29i88!=;ws8k+x*Yq5+~ z&s=Ho`#AYQDqr8wt1at3>~^o$e)qoL{ZohCY8$=-yHti1yk@5wPXF&5EZb47@1(k( z3X3aJ@_1TAdT6N3w`5B~M1nCn*wMTMEU2wWb(XjKraNm?*uyzP@2T*I0I^jTQ_C$o zeC%RyZ-J?_?cwmfb2U~6y3Aec2;q9DoVVDGS-~FFdy{CAMfv)7Db7jRauw584eHQe zHE_S9zp`7Fezw&9ZT&t@TTl@D(qjHEdNt<*vu$4a^gAsuP>YVd>1}J)YnbWvfhd?Y!BZWZvX4g|}}$GXxVFs^;~S*##wM zzAWuWWk}aI>Y&uOyhL;bmORbM&VRYW%ii&!WH1M{+Mfs4&^%~fB=p|ZC5bPy{@_83 z%@h`hp`YIJTd2LP!l%ODwVg@>b#d;!x+u_tiWskje%~`zSkPt+Ae=T^8t+{t2S0nb zw;LV3pjWK7&rV+*_XwjA>?Ra6FuTb(|C{-Fq~ABs@%_IpCWMtX3B0`kR@8TKGkdRl za!MK-e@r3QOo?Um_}y%r=PZi!0aWnc^Y3_=4O3wgMR$+rxrglv`7itC8M127n@Zf z&|r&<)WK#eFi%k?oPHp?&-8ODowv+EJjyT4!8id_+fA|@7{C^nf zCO_;I4nNS3S7hwYNl6Frtqzk3o@AF?o}FN_`8VG*W_QjTf739_1w`|FM$;%Ii}$1; zTY3;2>gZ?;G4==#rKyX8062Y*xGA%$DLe~opC3G+A`|ozd6nF#8xA#rvOG{=Yvfpx z`IeFuPn3wWpxQNKyB5xn5SXEHrjOch71jw#*14Z~6rA#C!s*;3^iB%+agl}-GC~s6 zT;!J|gJHrGb5O~k$Yf5bOY8jvmMg!uj7=+p8{pzMBH#Huu*5zj+(@r48CX0eWfl%M zH;j3g6a$1y@mTQW}GKfeQ8#RFk*hK=*3lZ!hqV<;t_QenoCHG!M8D-Q8Gva#re+#lNq;Tfchp;<)xm4(>K*d-{R}k|oim=D)AAZhoS+^8xPI_;2vlZbnSnG7L=e|13`2j#X<(-YYdC7+ z5`!?b$**Wm^JtbmH|yIQtgA$IR;f;G8LU6rAo|fdS2ppq71@D!PUyqB~kpG2Ho>#W4LoiO>oMaL~0`nBfLW z;DxIwP-&6*97NsKDWlF@S>}+SiRyW@n9!8O({S9PHe^W9F)(h&(S%iLN?3m&-C!M} z-ceLQq8XtSgIVzE3RE54$1O5N&I(4@`iCHr7LzWi|9KsiBAv_k2@@Ch-K=g{GOAhbcY@hrlvsFpfg)A(21_S*6ifV#Q%9~7i8jfI^t0euPVge|U<}eFF&=a7ZbGE|W1dO%~1- z`)cT=6e7c*aLPysYJqe!*4UIeSUZvatr5JAh>ER%0gUTD>j-ZQ=)L%9L$k(1LGW#8 z*OaX-m_(%XOce8wy(g#x^};3ak*1HBjcbw4mjfP$SI=dE$J`ehIW;R~m2Aq}m6|yM z2%cbM(F(K!&d9(BAnbkq$*lZ!ih3w#1cg(cv0zLKwFoajvh`OaCP^ybxagL90Sz*c zAB+nCc{Gs}xol|C$J4;hj9K$rUjq#7K(6aDVR@&%Ppp~DtdSyFBlhMXprD0B=?av! zY>`w3$;c8Yv_#9o9m)kZ3vA20SqBLn5KJ`bB)-tO^N7GYOEDT} zLytE$gSUcqjAJs~Ln?J;XvHcaH^^ZUiCWm+6hsrwZ(`9};HK5w&wNmW>GhE|FmycS z6*3`}P!KAk#YZwfD#367(#+yPkrdfjS|^#qf}MDmewksRleVEjFksM5`lW($rK#l6 zK@7%WJi*~rBL@R^B#1{#0vw=FFOb(VtG)n+_*gAp5{eaw!H4H%42Z_&st!Ksf59p9ai$d7&P!FYo%KR&7AY7-CZh* zHK?Y1>Z48;?Nvdj0^T&JlD-aZI|$E_T(!uT#2SRYCs8C!BBRJ6PpLl_6&-Gr7QrAa zvPd`CD}Y4sk!AjXXv>7fX>3!=sTtS7PIO+=*5G7%i_DQ4tOP=eo@G2KrBLB~p&!hf zAb_jZqZbiJSC-njB-2sN6)9(a%4jUjom%JLGEsFHS4{-!#Bv?{9%JwX8^)3fydoJ9 zYAYeAVEGv;idSQt4qYu^pk+wFs(u;%V8h~gM|!L1r^HtbGLa!Eei}9v;HpYPs3DRw zI(QPaBw#%QQAi0M<%jm11S^HHBEWk5x>q41#(1h7g1;#plBP`|E!avloW%{Q(WDSi z0z(TwO{Ymg(gj{ZRl>X|DiY5$O1zLO&>xl?LhAsyWX!ZI0(1PKt3dkUUf3wT7wl={ z74KpENF(DyZJsW!p}t^LjYi|K)nBO2u;rVWk8yNWlZjkQiSX7tp9T?&tLIR#6_uT5 z(RgJ2k9H2IZ(Id*9jkQ52||2v8B8lAZ;24ANFY0!MT8)m=gaA=RkpbiI3EfZorr^h z{d1~J9J_Lp8EO=sBMukwxl+Vfw(dEnS(dKoSwAScbF&vIH4W?9~M_ zN*N%Qu!Hk1Z0ZCW$Q15Ph{PXZljT?l{t}dl1>oTo+JaAuec9zW6Vhz1`@E8B@`!yO zVODDz{^ufhF9bE7%Mh7&)zaH6dDz|*2_u$CoKK+xH2VDeQayy1* z>5}b+vMIK1g6LC}iYaWJXyPa0eV2{I_Uxx5B{VmNXTw@kStAmlF?Ts>EtW{ngpVe< zxB!)GwQBOnI6#%Aih?@SV)@8Ft^gt%_#R?6eZiS&Wb`5l9XV?v(#!D)^eu(Zd1}R< z*E^A#%+oMZ8kOAR)kwWQgnI8`L5eQ5=;zS}pYJN?F6DUHK^a9Z&%zl z_u-LY5VZ_LkuZS!OxKhF4D z;^w^3SgIqMjY&G^?2D6e&7&~opiOC2Fg{{|FmEXyR{%9dWJ{dUQ;F>{F4AC^H4vcu zqSQidC7jQ%Emp!pd#<5QaZg3pC#NzGjQd3Y-fRw*(_cpN8FMgL#$Cw3B`mV3iYHQt|GXesONK!?{pjkxM05HY$aRIK(s|5@x1M$HZw)6hdH5 zy|z`ujOfY1(F3*_{7#EQ&MkduJ>b@*NgJD4=ofN^IWZ<EhQbc4{zB(sb(1mdfwz1-4t?NIj)+G2iYERehz@KQ zWV488JhE7}wJ;ukxp24-T0`A&i0pBo(0O_sruAQ2ht)3LLamu-bj}7yfO*;|SHdLx ztLC34Q%0xjGD7tD1F#{|J!9X|{u+;2Q(+`@f! zO$CbDLtUY<9&GMWkCgmq0WEm717dkA0FfJYlQE-H{{qSJcL^JejzbMgGdHl8T2ZZi z%K)yEXhtt<6)bR{h1(29xiUGV7JxKpf|V61iGT(0adC0!$@W;I=i=j>%*bZ)l1{uz zYThD`7z`Pnl#l^TByJ#a){ynbE_8vfK4_^xi9i??%o}||_H)MOlWKY^%{`=I`1trR z#}4T{V2E?YU@%$Q{PNZzJ`rLP7UZxIGO{7KMVHCx_OKUx?Ap++z%4^dUm$3X4>{Q? z9xEn>jkxpdLP1!7=6M8ND9$D^#A%s`<2uGGhi3`a4Mef+0GWe`dC~ty#aIN(I1b5l z-oSHdDGcQ=yy5R#8GlwIbc>x1ooVL}dt~&Hcf-jjE zc!Tn+9{G?g92mTzHOf+s*ImZvaW0Pfad_nd`D!OFjz{Vt-I5?oeLj~M8G9=#_`2r0 zUsw0yQWyJ%xONbG95}9#_Cs~)R^~Wo{ECP*{Ear@=r%Dv>9Om6P$Oc^!qKdUXPXj5 z;e9WHPgWuQYet;=`3+DUzSv58;03AR^`(KOU1$*)Yqj<)tgr5TfqEI-I zEi}^kw9x~&Ys|U?o+q)U9%|^CmTM7Z8?C_OLdL>OM`i@@&bp?;U{KO4zS4s_PS&z* zxRlfzR!t-6kCsWUK;Jb{TO%zAw#izCx`68w?K;i4{9Vbu&{QbA?tAnT1>+eKc!<5S z7zg`>(?~)^622fEa-p!Yl=^`mwDI!xBAQEfzI(5!=3kgZAaBc@W`*;%SjEyCuyT8 zwvZQ;sO7L~F6C5MDDay_{Ipx~xXp@`C0K*Yjb^4${mkEF)q9C3S(#J;H$SoJT%Bj^ zt+P3M>Z%jJL7dMu78I~ATT1R!8@~+Ipuy<89@-e6Ce>ij7pc~mYer^iUstABFn`Or zSA!U=4@n{_ekREomiuSykO#qxdCl_}B~-r5&IvA%)j`Wzq>eV@Eb%J@@KcUJBGGT5 zOVKc}+|Hs)O%hH_RC%6E#owK=;N+~9foHOX1eW-v9rd9WGZ*aTe5!}TWGWLdB<(Zg zBva11GT9~b48S0(_lmE;_0{&T6h_)fNj`De5-J8&6N(_dOk&1_r?pk%vnglCp`&O8 z&V9~xx>6hQoX8M;lm&nT!|K{fv}%?wh-YZIA2)4et?s3GsQIroffZ+7?gWAdHcgbx zq7*VqZBwvH$^7T@GOXoW=^~;_G_sIL1fj@=S61oAq7}db9oxv*>i{00*}jNSe0C{2 z(fuKM884*PBoG&f9Ckx#Ns?xmS6{7c77%C7lrg}BEPE4R59Uw2G%~ zhM0{H+D;{@O&O>(Whc1I(E~dK4eYQm_A;CyM3^^`pcW#Vy9AcR!hHJ*Ow;DxG;Pk1 zyrr#8iydt?s<%2ADl8j)^0nrct=Api%#lp^q=YPBb>Li#nah3F4I9v5Om}u+(8?p0AC`SV^7us( zj(K(S+DkuLwi8r9BBzkV-tpM;0q{?Dt50PEjntG(5@)hw3y>r>3`xMK8gZ{&h&&n3 zuh|H7bZp*YfX75$I z_p;MMxn2h){JM}e>s3Idj`@4%kEflZQ*+Ykz3!f#Qf<5MO#9@7D#tM(=CJ*iNZk43 zUgzZ0ynWR<3XW0z+b;E|f7-?i-6MmGR=P(oxk9Ao_PQ@$otjt2hx?r#=kGqG*7-$q z((avhJN>lkMp6zpL@GjMGbbLy5qLEQQPmh^2wydq4Iz#mbuRA@W-_dD%w|m&7 zCXq{g&^g-W}+r4+D-|4;S?tu_Odhx!hH*Af_m} zv%Px^8thVky4)@52nd2H+Hb#ZzwGo|fnx%0TGPv0rhn4e>*5c3POL|BeJE6+RrH55 z%p(1um6$e7Cx!+-)G5On1g{-g9-+4D>vFwpyT*Uui^JnSn2j1aZ5!?}{kz*i>0alE z=*7#ay|;JPqosusc!PS=KcmIgJ>p3TFkW8G-QK=kPfTZX(C!|d^%i)HT0SNcqDtm9 zHzAhE`Wr3g0n?LRP1)BSbP6X7m`QX31}_!yGoN|twHIyOxn?C z`R#@T|LPmBB$=wsR;zeoPZ=oCkMAIvj|dg1I?V8@s?Z^6;Bhh|Ev~Ss%(nEl#Az;{ zYSjzgGLq#1*(&aCS_jz}2&!cc(*jNh_FZ4X6cKbJ+3>8a;ykD-4N;bEj}P*fDo#*u z^Qem{TQ{TKL}y*Mc^+zHs>Dz(<<~+?aaRyU*ksDW5r&2yySFE{u$=vYP!yhMC(yN9jYXin*-QXGVypJrC6a$~rL#q6w5(`4Tar~m zmXB5V5KLC-@3?&$8c}37@R$<|ZQ>^(a#T^*-9+3QsP2Bme8M%XAhT>h=Z(KG$TA%| z9PmD0m-!Zzbdpu`hZve<=}NS-q~#8u9GBFg`L)La(C70{2EY~;q&LBx;AfM-<0e9w zlMrNcCXh9se3&Lv8k6iIBtyaQ`628gtt56-@>p9|LfY*oAxN3J)ZcOZLF8$`d6IE1 z@+p(O7nO`yT%D(hS1+f8#y^S~U|IaxPp#UD#)3B0)x7ZbfXoivcG}+UA0HATIeh1% z=^f?@WeAhciN*h$H@sfm-z*nKT_Tj)ht)weMmwNuO+auBy5q_@nyl@%<2N_B?{{QV zGF&d_GgyQi4=Z!SZU49r?rr5@yIHrg2c=?gF5RVeJmL_HMor50IK-U68#;$41hF}e z9FsxEt_W|7RAbk4$CG&USpu9#!6cz79}K7mAJ_vjiKYb+ESh8w9zd3})twcwM1b8f z0lL>j2g^Bp*ul(2aO`<9k8pC2+TJc}S>K*S>4uT*-)WG+)*nkuWGZ>@2ufqSUFpRu zH|ngF`&ldkiATW{yX!OAvV?C)h7eTyi?6m6l9jw9Gc4wKN{{fhK@0@}Pw?KC;;E1bc&12E_xsL_Ru)j7FGB zX9)PmpI>%^1m5OZcTRx|$ECg~3K7gr6U4G1Y|c}9#d&iAn?}z2I3f5&TXC3DdP1_5 zlfe8IJr8{5(pLhl+X?sNCK``mr* lK6jtH&)w(lbN9LX+/dev/null) } + +%description +%{prjname} kernel module + +%prep +kmodtool --target %{_target_cpu} --kmodname %{prjname} %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels "%{?kernels}"} 2>/dev/null + +%autosetup -n nct6687d-%{version} + +for kernel_version in %{?kernel_versions} ; do + cp -a nct6687d _kmod_build_${kernel_version%%___*} +done + +%build +for kernel_version in %{?kernel_versions}; do + make V=0 %{?_smp_mflags} -C "${kernel_version##*___}" M=${PWD}/_kmod_build_${kernel_version%%___*} +done + +%install +for kernel_version in %{?kernel_versions}; do + mkdir -p %{buildroot}%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/ + install -D -m 755 _kmod_build_${kernel_version%%___*}/*.ko %{buildroot}%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/ + chmod a+x %{buildroot}%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/*.ko +done +%{?akmod_install} + + +%changelog +* Wed Jan 04 2023 Frederic BOLTZ - %{version} +- Initial package diff --git a/.tmp/rpmbuild/SPECS/nct6687d.spec b/.tmp/rpmbuild/SPECS/nct6687d.spec new file mode 100644 index 0000000..dca2877 --- /dev/null +++ b/.tmp/rpmbuild/SPECS/nct6687d.spec @@ -0,0 +1,35 @@ +%global pkgver 62 +%global commithash f59feef + +Name: nct6687d +Version: 1.0.%{pkgver} +Release: git%{commithash} +Summary: Kernel module (kmod) for %{prjname} +License: GPL-2.0 +URL: https://github.com/Fred78290/nct6687d +Source0: nct6687.conf + +# For kmod package +Provides: %{name}-kmod-common = %{version}-%{release} +Requires: %{name}-kmod >= %{version} + +BuildArch: noarch + +%description +%{prjname} kernel module + +%prep + +%build +# Nothing to build + +%install + +install -D -m 0644 %{SOURCE0} %{buildroot}%{_modulesloaddir}/nct6687.conf + +%files +%{_modulesloaddir}/nct6687.conf + +%changelog +* Wed Jan 04 2023 Frederic BOLTZ - %{version} +- Initial package diff --git a/.tmp/rpmbuild/SRPMS/nct6687d-1.0.62-gitf59feef.src.rpm b/.tmp/rpmbuild/SRPMS/nct6687d-1.0.62-gitf59feef.src.rpm new file mode 100644 index 0000000000000000000000000000000000000000..d00af2962530c1f6b6ae263057658a99ab0e0b12 GIT binary patch literal 7541 zcmeHMdvH|M8NbO!8gHltYz9FJcLr%m$?o2Jckhb?#3Z085%Mf1wlVi{?(R)?_pbY3 zcnlgcQCdK!Mr>&Su{DiBYEvQD(rAgyn8AUOP#k4i;!p}9iU?Gtj1RWo**zOFE$!gn z?wL9Ho!|Ms^PTT}=aD<#UfBK7-y9T`MP-Hbm?+AU;pAMbOXQtCD`pCciI7R%Y{{Z- z`A^j+UmDFKeczy{Nqx{>2o<-x04KrJ-vpch6&KLWnhc0}L5e#@0dt@R2>%ce##3Ra zFy3(y5X)Pk!g$9eKrC+uG2>A*!IVT+YhU^%2yhO9_l z+0ay#lVnK{WW|(u7POIWdQ4SPWmz>0Xela^G+8%zkLH!Zw8s#1mRDdxipm>)>TLYe zzI|(YmzK80zrC;OPvDx76lMNoB9MtdCIXoVWFnA>Kqdm22xKCVi9jX-nFwSekcq(8 zJp##`NFtH=83Y1y8Wc4yZz4iEM1`)qp+a6`LKPs^!Fh#TsJP&~2hNk=yh%3U?-QO! z_y>efAspvXZiV_C!Y>eh58)pH=0N=s;W*EN?KcsA84%0;gkJ%~@^qf&Dzvfv7*y=v zXMot>R>Hpk#QIMV{w3ji3BN}8{uIx_bKyDw71o%8$3p6gIz%|03-cp{(|}lih;SSS zJpT#8C#HB-1K~Ii1^QWdz1aS@h}<9?#~j9IMF`Ia#QLp-PX)yCp8&#obM64d@-0L@ zjmWnXKArHizjJ}ZnzBv;;_)&d9)E^#oMOWEM+u*w;@Ni+j`t1Z*-pZj0D`@2FX8tB zg1zkf0P*@TVqQsjIUpYY0O8d{j^ly-!TngjiST+rtZxvG^{{*uAh!QwB5x(Uk??JR z*d88-{loFV91;F2!cD@vQ~dU)0kQoa!Uu``w}hVo#Qy9d{45~W|Ag@OiTooZ3-?x5IC&RK)rF#Aq+6zijP&d--428qxhQOLFaJ*LSV&!UWHWE3bJZRuVK12kUixEq$+}`DLUdz zmi4G6Czu?odPGU^AXVZZuga;qWajDbTz;~EJE z1C}lk^5-Wg~LDZuK6p`VcGRudeG3fI^0^954D6dO&u}S1)2sgx}c@d5y zidZ^Rvb>_Ufhjf#cWHJYwq}tps9FIW@P&+%AqT<9l!vUCr3RR=s<)^zaZPtHNfANac8qLoDW;B0#@xcr}l}N~}kcRfR*QD6=9((=^_S`ONi_cAx$s zibO3tG$u<0fUZUXq(-j~xqj2=ns_j%MploFxQUxbS6DgO8>9d2Grn=glT#KNS-<@2mWbq-<>yAewZg>FPsrNVP4A`pSGSUN+bHmz9 zcmksIO)BetHRMA9+ed$&S%D1Z2Wp66y$t-|<6*w~6G8vi6M?@yQXg!I#23#&d(x~; z@V^O4w&R(apuLTqG_v>6Hx}Ri7xC89L+!8ncfS+5@V2vgch_*&x?fJb%_|+i^%tUQPo$!B&O_vc@o`Pbog{_xgiuz~kONil@TkOtX=QmU?D}VS<#nxA(4WH#V{Jeh2+dCJW znpf8rIb_sE=-w5Bs~s=bHZ{Na(81sL3~hg`Hn#DRKkqDhcGIzcXz%?dch@_sx%2!^(Np6OiNcLJT* z=5)R=LHRULJ+L;~AKJ2O#@gqnPitQA$S*1u?94kiT-fefI{18Eez)_1`?T!#!11Em z!gnV;e%qdb7w7F*e|F=@NbU!``Q(GUYQ8&VXiDci!&BuysFb|qc}pzhU#&TEfd^tQRnsF`gW zUi0+4Tb7^q_kV`2U2?qlM)1Q49p?|s>e$RSUi^5*_TL$|oy_g7|FY^2{d)?}zj^nS hjvX6|UTHd4T<8jotk~4p>uY#0L6s!*gaMx<{{~F)RL}qb literal 0 HcmV?d00001 diff --git a/.tmp/rpmbuild/SRPMS/nct6687d-kmod-1.0.62-gitf59feef.src.rpm b/.tmp/rpmbuild/SRPMS/nct6687d-kmod-1.0.62-gitf59feef.src.rpm new file mode 100644 index 0000000000000000000000000000000000000000..f571d91b3817cf2fcc5be952a2ccf117c57068c8 GIT binary patch literal 26548 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 literal 0 HcmV?d00001 diff --git a/Makefile b/Makefile index cd9b23e..14de1b6 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,10 @@ obj-m += nct6687.o -curpwd := $(shell pwd) -kver := $(shell uname -r) +curpwd := $(shell pwd) +kver := $(shell uname -r) +commitcount := $(shell git rev-list --all --count) +commithash := $(shell git rev-parse --short HEAD) + build: rm -rf ${curpwd}/${kver} @@ -9,16 +12,35 @@ build: cp ${curpwd}/Makefile ${curpwd}/nct6687.c ${curpwd}/${kver} cd ${curpwd}/${kver} make -C /lib/modules/${kver}/build M=${curpwd}/${kver} modules - install: build sudo cp ${curpwd}/${kver}/nct6687.ko /lib/modules/${kver}/kernel/drivers/hwmon/ sudo depmod sudo modprobe nct6687 - clean: [ -d "${curpwd}/${kver}" ] && make -C /lib/modules/${kver}/build M=${curpwd}/${kver} clean +akmod/build: + sudo dnf groupinstall -y "Development Tools" + sudo dnf install -y rpmdevtools kmodtool + mkdir -p ${curpwd}/.tmp/nct6687d-1.0.${commitcount}/nct6687d + cp LICENSE Makefile nct6687.c ${curpwd}/.tmp/nct6687d-1.0.${commitcount}/nct6687d + cd .tmp && tar -czvf nct6687d-1.0.${commitcount}.tar.gz nct6687d-1.0.${commitcount} && cd - + mkdir -p ${curpwd}/.tmp/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} + cp ${curpwd}/.tmp/nct6687d-1.0.${commitcount}.tar.gz ${curpwd}/.tmp/rpmbuild/SOURCES/ + echo 'nct6687' | tee ${curpwd}/.tmp/rpmbuild/SOURCES/nct6687.conf + cp fedora/*.spec ${curpwd}/.tmp/rpmbuild/SPECS/ + sed -i "s/MAKEFILE_PKGVER/${commitcount}/g" ${curpwd}/.tmp/rpmbuild/SPECS/* + sed -i "s/MAKEFILE_COMMITHASH/${commithash}/g" ${curpwd}/.tmp/rpmbuild/SPECS/* + rpmbuild -ba --define "_topdir ${curpwd}/.tmp/rpmbuild" ${curpwd}/.tmp/rpmbuild/SPECS/nct6687d.spec + rpmbuild -ba --define "_topdir ${curpwd}/.tmp/rpmbuild" ${curpwd}/.tmp/rpmbuild/SPECS/nct6687d-kmod.spec +akmod/install: akmod/build + sudo dnf install ${curpwd}/.tmp/rpmbuild/RPMS/*/*.rpm +akmod/clean: + sudo dnf remove nct6687d + rm -rf .tmp +akmod: akmod/install + dkms/build: make -C /lib/modules/${kver}/build M=${curpwd} modules @@ -36,8 +58,6 @@ dkms/clean: sudo dkms remove nct6687d/1 --all make -C /lib/modules/${kver}/build M=${curpwd} clean - - debian/changelog: FORCE git --no-pager log \ --format='nct6687d-dkms (%ad) unstable; urgency=low%n%n * %s%n%n -- %aN <%aE> %aD%n' \ @@ -45,6 +65,7 @@ debian/changelog: FORCE > $@ deb: debian/changelog + sudo apt install -y debhelper dkms dpkg-buildpackage -b -rfakeroot -us -uc .PHONY: FORCE diff --git a/README.md b/README.md index b5369fb..6723932 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ ![https://valid.x86.fr/vsb4yv](https://valid.x86.fr/cache/banner/vsb4yv-6.png) ![https://valid.x86.fr/20aiek](https://valid.x86.fr/cache/banner/20aiek-6.png) -# README - -## NCT6687D Kernel module +# NCT6687D Kernel module This kernel module permit to recognize the chipset Nuvoton NCT6687-R in lm-sensors package. This sensor is present on some B550 motherboard such as MSI or ASUS. @@ -11,7 +9,36 @@ The implementation is minimalist and was done by reverse coding of Windows 10 so

## Installation -#### Dependencies: +### .deb package +- Clone this repository +```shell +~$ git clone https://github.com/Fred78290/nct6687d +~$ cd nct6687d +``` +- Build package +```shell +~$ make deb +``` +- Install package +```shell +~$ dpkg -i ../nct6687d-dkms_*.deb +``` +
+ +### .rpm package (akmod) +- Clone this repository +```shell +~$ git clone https://github.com/Fred78290/nct6687d +~$ cd nct6687d +``` +- Build & install package +```shell +~$ make akmod +``` +

+ +## Manual Install +### Dependencies: - Ubuntu/Debian: ```apt-get install build-essential linux-headers-$(uname -r) dkms``` - Fedora/CentOS/RHEL: @@ -38,26 +65,6 @@ The implementation is minimalist and was done by reverse coding of Windows 10 so ```
-### Deb package -- Prerequisites -```shell -~$ apt install -y debhelper dkms -``` -- Clone this repository -```shell -~$ git clone https://github.com/Fred78290/nct6687d -~$ cd nct6687d -``` -- Build package -```shell -make deb -``` -- Install package -```shell -dpkg -i ../nct6687d-dkms_*.deb -``` -

- ## Sensors By running the command sensors, you got this output @@ -176,4 +183,4 @@ chip "nct6687-*" ## VERIFIED **1. Fan speed control** -- Changing fan speed was tested succesfuly by users, see reported issue. \ No newline at end of file +- Changing fan speed was tested succesfuly by users, see reported issue. diff --git a/fedora/nct6687d-kmod.spec b/fedora/nct6687d-kmod.spec new file mode 100644 index 0000000..9740d6b --- /dev/null +++ b/fedora/nct6687d-kmod.spec @@ -0,0 +1,57 @@ +%if 0%{?fedora} +%global buildforkernels akmod +%global debug_package %{nil} +%endif + +%global prjname nct6687d +%global pkgver MAKEFILE_PKGVER +%global commithash MAKEFILE_COMMITHASH +%define buildforkernels akmod + +Name: %{prjname}-kmod +Version: 1.0.%{pkgver} +Release: git%{commithash} +Summary: Kernel module (kmod) for %{prjname} +License: GPL-2.0 +URL: https://github.com/Fred78290/nct6687d +Source0: nct6687d-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-root-%(%{__id_u} -n) + + +BuildRequires: gcc +BuildRequires: make +BuildRequires: elfutils-libelf-devel +BuildRequires: kmodtool +Conflicts: nct6687d-kmod-common + +%{expand:%(kmodtool --target %{_target_cpu} --kmodname %{prjname} %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels "%{?kernels}"} 2>/dev/null) } + +%description +%{prjname} kernel module + +%prep +kmodtool --target %{_target_cpu} --kmodname %{prjname} %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels "%{?kernels}"} 2>/dev/null + +%autosetup -n nct6687d-%{version} + +for kernel_version in %{?kernel_versions} ; do + cp -a nct6687d _kmod_build_${kernel_version%%___*} +done + +%build +for kernel_version in %{?kernel_versions}; do + make V=0 %{?_smp_mflags} -C "${kernel_version##*___}" M=${PWD}/_kmod_build_${kernel_version%%___*} +done + +%install +for kernel_version in %{?kernel_versions}; do + mkdir -p %{buildroot}%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/ + install -D -m 755 _kmod_build_${kernel_version%%___*}/*.ko %{buildroot}%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/ + chmod a+x %{buildroot}%{kmodinstdir_prefix}/${kernel_version%%___*}/%{kmodinstdir_postfix}/*.ko +done +%{?akmod_install} + + +%changelog +* Wed Jan 04 2023 Frederic BOLTZ - %{version} +- Initial package diff --git a/fedora/nct6687d.spec b/fedora/nct6687d.spec new file mode 100644 index 0000000..72a0fda --- /dev/null +++ b/fedora/nct6687d.spec @@ -0,0 +1,35 @@ +%global pkgver MAKEFILE_PKGVER +%global commithash MAKEFILE_COMMITHASH + +Name: nct6687d +Version: 1.0.%{pkgver} +Release: git%{commithash} +Summary: Kernel module (kmod) for %{prjname} +License: GPL-2.0 +URL: https://github.com/Fred78290/nct6687d +Source0: nct6687.conf + +# For kmod package +Provides: %{name}-kmod-common = %{version}-%{release} +Requires: %{name}-kmod >= %{version} + +BuildArch: noarch + +%description +%{prjname} kernel module + +%prep + +%build +# Nothing to build + +%install + +install -D -m 0644 %{SOURCE0} %{buildroot}%{_modulesloaddir}/nct6687.conf + +%files +%{_modulesloaddir}/nct6687.conf + +%changelog +* Wed Jan 04 2023 Frederic BOLTZ - %{version} +- Initial package