diff options
Diffstat (limited to 'drivers/hwmon/gpd-fan.c')
| -rw-r--r-- | drivers/hwmon/gpd-fan.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/drivers/hwmon/gpd-fan.c b/drivers/hwmon/gpd-fan.c index 237f496c4862..1729729b135f 100644 --- a/drivers/hwmon/gpd-fan.c +++ b/drivers/hwmon/gpd-fan.c @@ -31,6 +31,7 @@ enum gpd_board { win4_6800u, win_max_2, duo, + mpc2, }; enum FAN_PWM_ENABLE { @@ -106,6 +107,18 @@ static struct gpd_fan_drvdata gpd_wm2_drvdata = { .pwm_max = 184, }; +static struct gpd_fan_drvdata gpd_mpc2_drvdata = { + .board_name = "mpc2", + .board = mpc2, + + .addr_port = 0x4E, + .data_port = 0x4F, + .manual_control_enable = 0x047A, + .rpm_read = 0x0476, + .pwm_write = 0x047A, + .pwm_max = 244, +}; + static const struct dmi_system_id dmi_table[] = { { // GPD Win Mini @@ -212,11 +225,19 @@ static const struct dmi_system_id dmi_table[] = { }, .driver_data = &gpd_win_mini_drvdata, }, + { + // GPD Micro PC 2 + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "GPD"), + DMI_MATCH(DMI_PRODUCT_NAME, "G1688-08"), + }, + .driver_data = &gpd_mpc2_drvdata, + }, {} }; static const struct gpd_fan_drvdata *gpd_module_drvdata[] = { - &gpd_win_mini_drvdata, &gpd_win4_drvdata, &gpd_wm2_drvdata, NULL + &gpd_win_mini_drvdata, &gpd_win4_drvdata, &gpd_wm2_drvdata, &gpd_mpc2_drvdata, NULL }; // Helper functions to handle EC read/write @@ -295,6 +316,7 @@ static int gpd_read_rpm(void) case win4_6800u: case win_mini: case duo: + case mpc2: return gpd_generic_read_rpm(); case win_max_2: return gpd_wm2_read_rpm(); @@ -321,6 +343,7 @@ static int gpd_read_pwm(void) case win_mini: case duo: case win4_6800u: + case mpc2: switch (gpd_driver_priv.pwm_enable) { case DISABLE: return 255; @@ -376,6 +399,7 @@ static int gpd_write_pwm(u8 val) case win_mini: case win4_6800u: case win_max_2: + case mpc2: gpd_generic_write_pwm(val); break; } @@ -443,6 +467,7 @@ static void gpd_set_pwm_enable(enum FAN_PWM_ENABLE enable) switch (gpd_driver_priv.drvdata->board) { case win_mini: case win4_6800u: + case mpc2: gpd_win_mini_set_pwm_enable(enable); break; case duo: |
