diff mbox series

[RFC,2/2] platform/x86: thinkpad_acpi/ideapad-laptop: extract common DYTC constants/functions

Message ID 20210204203933.559752-3-pobrn@protonmail.com (mailing list archive)
State Changes Requested, archived
Headers show
Series platform/x86: thinkpad_acpi/ideapad-laptop: move into subfolder and extract common DYTC code | expand

Commit Message

Barnabás Pőcze Feb. 4, 2021, 8:40 p.m. UTC
Extract common DYTC constants/functions into a dedicated header file
to avoid code duplication. Rename DYTC_MODE_BALANCE to DYTC_MODE_BALANCED
and DYTC_MODE_PERFORM to DYTC_MODE_PERFORMANCE to be consistent
with the platform_profile_option enum.

Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>

 create mode 100644 drivers/platform/x86/lenovo/dytc.h

Comments

Mark Pearson Feb. 9, 2021, 11:51 p.m. UTC | #1
Thanks for doing this Barnabas - feel like I should have contributed to
this exercise :)

Looks excellent

Mark

On 04/02/2021 15:40, Barnabás Pőcze wrote:
> Extract common DYTC constants/functions into a dedicated header file
> to avoid code duplication. Rename DYTC_MODE_BALANCE to DYTC_MODE_BALANCED
> and DYTC_MODE_PERFORM to DYTC_MODE_PERFORMANCE to be consistent
> with the platform_profile_option enum.
> 
> Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
> 
>  create mode 100644 drivers/platform/x86/lenovo/dytc.h
> 
> diff --git a/drivers/platform/x86/lenovo/dytc.h b/drivers/platform/x86/lenovo/dytc.h
> new file mode 100644
> index 000000000000..9ec341bdef70
> --- /dev/null
> +++ b/drivers/platform/x86/lenovo/dytc.h
> @@ -0,0 +1,79 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +#ifndef _LENOVO_DYTC_H_
> +#define _LENOVO_DYTC_H_
> +
> +#include <linux/platform_profile.h>
> +
> +#define DYTC_CMD_QUERY         0 /* To get DYTC status - enable/revision */
> +#define DYTC_CMD_SET           1 /* To enable/disable IC function mode */
> +#define DYTC_CMD_GET           2 /* To get current IC function and mode */
> +#define DYTC_CMD_RESET       511 /* To reset back to default */
> +
> +#define DYTC_QUERY_ENABLE_BIT  8 /* Bit        8 - 0 = disabled, 1 = enabled */
> +#define DYTC_QUERY_SUBREV_BIT 16 /* Bits 16 - 27 - sub revision */
> +#define DYTC_QUERY_REV_BIT    28 /* Bits 28 - 31 - revision */
> +
> +#define DYTC_GET_FUNCTION_BIT  8 /* Bits  8 - 11 - function setting */
> +#define DYTC_GET_MODE_BIT     12 /* Bits 12 - 15 - mode setting */
> +#define DYTC_GET_LAPMODE_BIT  17 /* Bit       17 - set when in lapmode */
> +
> +#define DYTC_SET_FUNCTION_BIT 12 /* Bits 12 - 15 - function setting */
> +#define DYTC_SET_MODE_BIT     16 /* Bits 16 - 19 - mode setting */
> +#define DYTC_SET_VALID_BIT    20 /* Bit       20 - 1 = on, 0 = off */
> +
> +#define DYTC_FUNCTION_STD      0 /* Function =  0, standard mode */
> +#define DYTC_FUNCTION_CQL      1 /* Function =  1, lap mode */
> +#define DYTC_FUNCTION_MMC     11 /* Function = 11, desk mode */
> +
> +#define DYTC_MODE_PERFORMANCE  2 /* High power mode aka performance */
> +#define DYTC_MODE_LOW_POWER    3 /* Low power mode aka quiet */
> +#define DYTC_MODE_BALANCED    15 /* Default mode aka balanced */
> +
> +#define DYTC_SET_COMMAND(function, mode, on) \
> +	(DYTC_CMD_SET | (function) << DYTC_SET_FUNCTION_BIT | \
> +	 (mode) << DYTC_SET_MODE_BIT | \
> +	 (on) << DYTC_SET_VALID_BIT)
> +
> +#define DYTC_DISABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCED, 0)
> +
> +#define DYTC_ENABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCED, 1)
> +
> +static int inline convert_dytc_to_profile(int dytcmode, enum platform_profile_option *profile)
> +{
> +	switch (dytcmode) {
> +	case DYTC_MODE_LOW_POWER:
> +		*profile = PLATFORM_PROFILE_LOW_POWER;
> +		break;
> +	case DYTC_MODE_BALANCED:
> +		*profile =  PLATFORM_PROFILE_BALANCED;
> +		break;
> +	case DYTC_MODE_PERFORMANCE:
> +		*profile =  PLATFORM_PROFILE_PERFORMANCE;
> +		break;
> +	default: /* Unknown mode */
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}
> +
> +static inline int convert_profile_to_dytc(enum platform_profile_option profile, int *dytcmode)
> +{
> +	switch (profile) {
> +	case PLATFORM_PROFILE_LOW_POWER:
> +		*dytcmode = DYTC_MODE_LOW_POWER;
> +		break;
> +	case PLATFORM_PROFILE_BALANCED:
> +		*dytcmode = DYTC_MODE_BALANCED;
> +		break;
> +	case PLATFORM_PROFILE_PERFORMANCE:
> +		*dytcmode = DYTC_MODE_PERFORMANCE;
> +		break;
> +	default: /* Unknown profile */
> +		return -EOPNOTSUPP;
> +	}
> +
> +	return 0;
> +}
> +
> +#endif /* _LENOVO_DYTC_H_ */
> diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c
> index 6cb5ad4be231..387c8c86b8bb 100644
> --- a/drivers/platform/x86/lenovo/ideapad-laptop.c
> +++ b/drivers/platform/x86/lenovo/ideapad-laptop.c
> @@ -35,6 +35,8 @@
>  
>  #include <dt-bindings/leds/common.h>
>  
> +#include "dytc.h"
> +
>  #define IDEAPAD_RFKILL_DEV_NUM	3
>  
>  #if IS_ENABLED(CONFIG_ACPI_WMI)
> @@ -676,76 +678,6 @@ static const struct attribute_group ideapad_attribute_group = {
>  /*
>   * DYTC Platform profile
>   */
> -#define DYTC_CMD_QUERY        0 /* To get DYTC status - enable/revision */
> -#define DYTC_CMD_SET          1 /* To enable/disable IC function mode */
> -#define DYTC_CMD_GET          2 /* To get current IC function and mode */
> -#define DYTC_CMD_RESET    0x1ff /* To reset back to default */
> -
> -#define DYTC_QUERY_ENABLE_BIT 8  /* Bit        8 - 0 = disabled, 1 = enabled */
> -#define DYTC_QUERY_SUBREV_BIT 16 /* Bits 16 - 27 - sub revision */
> -#define DYTC_QUERY_REV_BIT    28 /* Bits 28 - 31 - revision */
> -
> -#define DYTC_GET_FUNCTION_BIT 8  /* Bits  8-11 - function setting */
> -#define DYTC_GET_MODE_BIT     12 /* Bits 12-15 - mode setting */
> -
> -#define DYTC_SET_FUNCTION_BIT 12 /* Bits 12-15 - function setting */
> -#define DYTC_SET_MODE_BIT     16 /* Bits 16-19 - mode setting */
> -#define DYTC_SET_VALID_BIT    20 /* Bit     20 - 1 = on, 0 = off */
> -
> -#define DYTC_FUNCTION_STD     0  /* Function = 0, standard mode */
> -#define DYTC_FUNCTION_CQL     1  /* Function = 1, lap mode */
> -#define DYTC_FUNCTION_MMC     11 /* Function = 11, desk mode */
> -
> -#define DYTC_MODE_PERFORM     2  /* High power mode aka performance */
> -#define DYTC_MODE_LOW_POWER       3  /* Low power mode aka quiet */
> -#define DYTC_MODE_BALANCE   0xF  /* Default mode aka balanced */
> -
> -#define DYTC_SET_COMMAND(function, mode, on) \
> -	(DYTC_CMD_SET | (function) << DYTC_SET_FUNCTION_BIT | \
> -	 (mode) << DYTC_SET_MODE_BIT | \
> -	 (on) << DYTC_SET_VALID_BIT)
> -
> -#define DYTC_DISABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCE, 0)
> -
> -#define DYTC_ENABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCE, 1)
> -
> -static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *profile)
> -{
> -	switch (dytcmode) {
> -	case DYTC_MODE_LOW_POWER:
> -		*profile = PLATFORM_PROFILE_LOW_POWER;
> -		break;
> -	case DYTC_MODE_BALANCE:
> -		*profile =  PLATFORM_PROFILE_BALANCED;
> -		break;
> -	case DYTC_MODE_PERFORM:
> -		*profile =  PLATFORM_PROFILE_PERFORMANCE;
> -		break;
> -	default: /* Unknown mode */
> -		return -EINVAL;
> -	}
> -
> -	return 0;
> -}
> -
> -static int convert_profile_to_dytc(enum platform_profile_option profile, int *perfmode)
> -{
> -	switch (profile) {
> -	case PLATFORM_PROFILE_LOW_POWER:
> -		*perfmode = DYTC_MODE_LOW_POWER;
> -		break;
> -	case PLATFORM_PROFILE_BALANCED:
> -		*perfmode = DYTC_MODE_BALANCE;
> -		break;
> -	case PLATFORM_PROFILE_PERFORMANCE:
> -		*perfmode = DYTC_MODE_PERFORM;
> -		break;
> -	default: /* Unknown profile */
> -		return -EOPNOTSUPP;
> -	}
> -
> -	return 0;
> -}
>  
>  /*
>   * dytc_profile_get: Function to register with platform_profile
> diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c
> index b881044b31b0..61990fc9870c 100644
> --- a/drivers/platform/x86/lenovo/thinkpad_acpi.c
> +++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c
> @@ -74,6 +74,8 @@
>  #include <acpi/battery.h>
>  #include <acpi/video.h>
>  
> +#include "dytc.h"
> +
>  /* ThinkPad CMOS commands */
>  #define TP_CMOS_VOLUME_DOWN	0
>  #define TP_CMOS_VOLUME_UP	1
> @@ -9845,9 +9847,6 @@ static struct ibm_struct lcdshadow_driver_data = {
>   * Thinkpad sensor interfaces
>   */
>  
> -#define DYTC_CMD_GET          2 /* To get current IC function and mode */
> -#define DYTC_GET_LAPMODE_BIT 17 /* Set when in lapmode */
> -
>  #define PALMSENSOR_PRESENT_BIT 0 /* Determine if psensor present */
>  #define PALMSENSOR_ON_BIT      1 /* psensor status */
>  
> @@ -9999,79 +9998,11 @@ static struct ibm_struct proxsensor_driver_data = {
>   * DYTC Platform Profile interface
>   */
>  
> -#define DYTC_CMD_QUERY        0 /* To get DYTC status - enable/revision */
> -#define DYTC_CMD_SET          1 /* To enable/disable IC function mode */
> -#define DYTC_CMD_RESET    0x1ff /* To reset back to default */
> -
> -#define DYTC_QUERY_ENABLE_BIT 8  /* Bit        8 - 0 = disabled, 1 = enabled */
> -#define DYTC_QUERY_SUBREV_BIT 16 /* Bits 16 - 27 - sub revision */
> -#define DYTC_QUERY_REV_BIT    28 /* Bits 28 - 31 - revision */
> -
> -#define DYTC_GET_FUNCTION_BIT 8  /* Bits  8-11 - function setting */
> -#define DYTC_GET_MODE_BIT     12 /* Bits 12-15 - mode setting */
> -
> -#define DYTC_SET_FUNCTION_BIT 12 /* Bits 12-15 - function setting */
> -#define DYTC_SET_MODE_BIT     16 /* Bits 16-19 - mode setting */
> -#define DYTC_SET_VALID_BIT    20 /* Bit     20 - 1 = on, 0 = off */
> -
> -#define DYTC_FUNCTION_STD     0  /* Function = 0, standard mode */
> -#define DYTC_FUNCTION_CQL     1  /* Function = 1, lap mode */
> -#define DYTC_FUNCTION_MMC     11 /* Function = 11, desk mode */
> -
> -#define DYTC_MODE_PERFORM     2  /* High power mode aka performance */
> -#define DYTC_MODE_LOWPOWER    3  /* Low power mode */
> -#define DYTC_MODE_BALANCE   0xF  /* Default mode aka balanced */
> -
> -#define DYTC_SET_COMMAND(function, mode, on) \
> -	(DYTC_CMD_SET | (function) << DYTC_SET_FUNCTION_BIT | \
> -	 (mode) << DYTC_SET_MODE_BIT | \
> -	 (on) << DYTC_SET_VALID_BIT)
> -
> -#define DYTC_DISABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCE, 0)
> -
> -#define DYTC_ENABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCE, 1)
> -
>  static bool dytc_profile_available;
>  static enum platform_profile_option dytc_current_profile;
>  static atomic_t dytc_ignore_event = ATOMIC_INIT(0);
>  static DEFINE_MUTEX(dytc_mutex);
>  
> -static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *profile)
> -{
> -	switch (dytcmode) {
> -	case DYTC_MODE_LOWPOWER:
> -		*profile = PLATFORM_PROFILE_LOW_POWER;
> -		break;
> -	case DYTC_MODE_BALANCE:
> -		*profile =  PLATFORM_PROFILE_BALANCED;
> -		break;
> -	case DYTC_MODE_PERFORM:
> -		*profile =  PLATFORM_PROFILE_PERFORMANCE;
> -		break;
> -	default: /* Unknown mode */
> -		return -EINVAL;
> -	}
> -	return 0;
> -}
> -
> -static int convert_profile_to_dytc(enum platform_profile_option profile, int *perfmode)
> -{
> -	switch (profile) {
> -	case PLATFORM_PROFILE_LOW_POWER:
> -		*perfmode = DYTC_MODE_LOWPOWER;
> -		break;
> -	case PLATFORM_PROFILE_BALANCED:
> -		*perfmode = DYTC_MODE_BALANCE;
> -		break;
> -	case PLATFORM_PROFILE_PERFORMANCE:
> -		*perfmode = DYTC_MODE_PERFORM;
> -		break;
> -	default: /* Unknown profile */
> -		return -EOPNOTSUPP;
> -	}
> -	return 0;
> -}
> -
>  /*
>   * dytc_profile_get: Function to register with platform_profile
>   * handler. Returns current platform profile.
>
diff mbox series

Patch

diff --git a/drivers/platform/x86/lenovo/dytc.h b/drivers/platform/x86/lenovo/dytc.h
new file mode 100644
index 000000000000..9ec341bdef70
--- /dev/null
+++ b/drivers/platform/x86/lenovo/dytc.h
@@ -0,0 +1,79 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later
+#ifndef _LENOVO_DYTC_H_
+#define _LENOVO_DYTC_H_
+
+#include <linux/platform_profile.h>
+
+#define DYTC_CMD_QUERY         0 /* To get DYTC status - enable/revision */
+#define DYTC_CMD_SET           1 /* To enable/disable IC function mode */
+#define DYTC_CMD_GET           2 /* To get current IC function and mode */
+#define DYTC_CMD_RESET       511 /* To reset back to default */
+
+#define DYTC_QUERY_ENABLE_BIT  8 /* Bit        8 - 0 = disabled, 1 = enabled */
+#define DYTC_QUERY_SUBREV_BIT 16 /* Bits 16 - 27 - sub revision */
+#define DYTC_QUERY_REV_BIT    28 /* Bits 28 - 31 - revision */
+
+#define DYTC_GET_FUNCTION_BIT  8 /* Bits  8 - 11 - function setting */
+#define DYTC_GET_MODE_BIT     12 /* Bits 12 - 15 - mode setting */
+#define DYTC_GET_LAPMODE_BIT  17 /* Bit       17 - set when in lapmode */
+
+#define DYTC_SET_FUNCTION_BIT 12 /* Bits 12 - 15 - function setting */
+#define DYTC_SET_MODE_BIT     16 /* Bits 16 - 19 - mode setting */
+#define DYTC_SET_VALID_BIT    20 /* Bit       20 - 1 = on, 0 = off */
+
+#define DYTC_FUNCTION_STD      0 /* Function =  0, standard mode */
+#define DYTC_FUNCTION_CQL      1 /* Function =  1, lap mode */
+#define DYTC_FUNCTION_MMC     11 /* Function = 11, desk mode */
+
+#define DYTC_MODE_PERFORMANCE  2 /* High power mode aka performance */
+#define DYTC_MODE_LOW_POWER    3 /* Low power mode aka quiet */
+#define DYTC_MODE_BALANCED    15 /* Default mode aka balanced */
+
+#define DYTC_SET_COMMAND(function, mode, on) \
+	(DYTC_CMD_SET | (function) << DYTC_SET_FUNCTION_BIT | \
+	 (mode) << DYTC_SET_MODE_BIT | \
+	 (on) << DYTC_SET_VALID_BIT)
+
+#define DYTC_DISABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCED, 0)
+
+#define DYTC_ENABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCED, 1)
+
+static int inline convert_dytc_to_profile(int dytcmode, enum platform_profile_option *profile)
+{
+	switch (dytcmode) {
+	case DYTC_MODE_LOW_POWER:
+		*profile = PLATFORM_PROFILE_LOW_POWER;
+		break;
+	case DYTC_MODE_BALANCED:
+		*profile =  PLATFORM_PROFILE_BALANCED;
+		break;
+	case DYTC_MODE_PERFORMANCE:
+		*profile =  PLATFORM_PROFILE_PERFORMANCE;
+		break;
+	default: /* Unknown mode */
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static inline int convert_profile_to_dytc(enum platform_profile_option profile, int *dytcmode)
+{
+	switch (profile) {
+	case PLATFORM_PROFILE_LOW_POWER:
+		*dytcmode = DYTC_MODE_LOW_POWER;
+		break;
+	case PLATFORM_PROFILE_BALANCED:
+		*dytcmode = DYTC_MODE_BALANCED;
+		break;
+	case PLATFORM_PROFILE_PERFORMANCE:
+		*dytcmode = DYTC_MODE_PERFORMANCE;
+		break;
+	default: /* Unknown profile */
+		return -EOPNOTSUPP;
+	}
+
+	return 0;
+}
+
+#endif /* _LENOVO_DYTC_H_ */
diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c
index 6cb5ad4be231..387c8c86b8bb 100644
--- a/drivers/platform/x86/lenovo/ideapad-laptop.c
+++ b/drivers/platform/x86/lenovo/ideapad-laptop.c
@@ -35,6 +35,8 @@ 
 
 #include <dt-bindings/leds/common.h>
 
+#include "dytc.h"
+
 #define IDEAPAD_RFKILL_DEV_NUM	3
 
 #if IS_ENABLED(CONFIG_ACPI_WMI)
@@ -676,76 +678,6 @@  static const struct attribute_group ideapad_attribute_group = {
 /*
  * DYTC Platform profile
  */
-#define DYTC_CMD_QUERY        0 /* To get DYTC status - enable/revision */
-#define DYTC_CMD_SET          1 /* To enable/disable IC function mode */
-#define DYTC_CMD_GET          2 /* To get current IC function and mode */
-#define DYTC_CMD_RESET    0x1ff /* To reset back to default */
-
-#define DYTC_QUERY_ENABLE_BIT 8  /* Bit        8 - 0 = disabled, 1 = enabled */
-#define DYTC_QUERY_SUBREV_BIT 16 /* Bits 16 - 27 - sub revision */
-#define DYTC_QUERY_REV_BIT    28 /* Bits 28 - 31 - revision */
-
-#define DYTC_GET_FUNCTION_BIT 8  /* Bits  8-11 - function setting */
-#define DYTC_GET_MODE_BIT     12 /* Bits 12-15 - mode setting */
-
-#define DYTC_SET_FUNCTION_BIT 12 /* Bits 12-15 - function setting */
-#define DYTC_SET_MODE_BIT     16 /* Bits 16-19 - mode setting */
-#define DYTC_SET_VALID_BIT    20 /* Bit     20 - 1 = on, 0 = off */
-
-#define DYTC_FUNCTION_STD     0  /* Function = 0, standard mode */
-#define DYTC_FUNCTION_CQL     1  /* Function = 1, lap mode */
-#define DYTC_FUNCTION_MMC     11 /* Function = 11, desk mode */
-
-#define DYTC_MODE_PERFORM     2  /* High power mode aka performance */
-#define DYTC_MODE_LOW_POWER       3  /* Low power mode aka quiet */
-#define DYTC_MODE_BALANCE   0xF  /* Default mode aka balanced */
-
-#define DYTC_SET_COMMAND(function, mode, on) \
-	(DYTC_CMD_SET | (function) << DYTC_SET_FUNCTION_BIT | \
-	 (mode) << DYTC_SET_MODE_BIT | \
-	 (on) << DYTC_SET_VALID_BIT)
-
-#define DYTC_DISABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCE, 0)
-
-#define DYTC_ENABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCE, 1)
-
-static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *profile)
-{
-	switch (dytcmode) {
-	case DYTC_MODE_LOW_POWER:
-		*profile = PLATFORM_PROFILE_LOW_POWER;
-		break;
-	case DYTC_MODE_BALANCE:
-		*profile =  PLATFORM_PROFILE_BALANCED;
-		break;
-	case DYTC_MODE_PERFORM:
-		*profile =  PLATFORM_PROFILE_PERFORMANCE;
-		break;
-	default: /* Unknown mode */
-		return -EINVAL;
-	}
-
-	return 0;
-}
-
-static int convert_profile_to_dytc(enum platform_profile_option profile, int *perfmode)
-{
-	switch (profile) {
-	case PLATFORM_PROFILE_LOW_POWER:
-		*perfmode = DYTC_MODE_LOW_POWER;
-		break;
-	case PLATFORM_PROFILE_BALANCED:
-		*perfmode = DYTC_MODE_BALANCE;
-		break;
-	case PLATFORM_PROFILE_PERFORMANCE:
-		*perfmode = DYTC_MODE_PERFORM;
-		break;
-	default: /* Unknown profile */
-		return -EOPNOTSUPP;
-	}
-
-	return 0;
-}
 
 /*
  * dytc_profile_get: Function to register with platform_profile
diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c
index b881044b31b0..61990fc9870c 100644
--- a/drivers/platform/x86/lenovo/thinkpad_acpi.c
+++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c
@@ -74,6 +74,8 @@ 
 #include <acpi/battery.h>
 #include <acpi/video.h>
 
+#include "dytc.h"
+
 /* ThinkPad CMOS commands */
 #define TP_CMOS_VOLUME_DOWN	0
 #define TP_CMOS_VOLUME_UP	1
@@ -9845,9 +9847,6 @@  static struct ibm_struct lcdshadow_driver_data = {
  * Thinkpad sensor interfaces
  */
 
-#define DYTC_CMD_GET          2 /* To get current IC function and mode */
-#define DYTC_GET_LAPMODE_BIT 17 /* Set when in lapmode */
-
 #define PALMSENSOR_PRESENT_BIT 0 /* Determine if psensor present */
 #define PALMSENSOR_ON_BIT      1 /* psensor status */
 
@@ -9999,79 +9998,11 @@  static struct ibm_struct proxsensor_driver_data = {
  * DYTC Platform Profile interface
  */
 
-#define DYTC_CMD_QUERY        0 /* To get DYTC status - enable/revision */
-#define DYTC_CMD_SET          1 /* To enable/disable IC function mode */
-#define DYTC_CMD_RESET    0x1ff /* To reset back to default */
-
-#define DYTC_QUERY_ENABLE_BIT 8  /* Bit        8 - 0 = disabled, 1 = enabled */
-#define DYTC_QUERY_SUBREV_BIT 16 /* Bits 16 - 27 - sub revision */
-#define DYTC_QUERY_REV_BIT    28 /* Bits 28 - 31 - revision */
-
-#define DYTC_GET_FUNCTION_BIT 8  /* Bits  8-11 - function setting */
-#define DYTC_GET_MODE_BIT     12 /* Bits 12-15 - mode setting */
-
-#define DYTC_SET_FUNCTION_BIT 12 /* Bits 12-15 - function setting */
-#define DYTC_SET_MODE_BIT     16 /* Bits 16-19 - mode setting */
-#define DYTC_SET_VALID_BIT    20 /* Bit     20 - 1 = on, 0 = off */
-
-#define DYTC_FUNCTION_STD     0  /* Function = 0, standard mode */
-#define DYTC_FUNCTION_CQL     1  /* Function = 1, lap mode */
-#define DYTC_FUNCTION_MMC     11 /* Function = 11, desk mode */
-
-#define DYTC_MODE_PERFORM     2  /* High power mode aka performance */
-#define DYTC_MODE_LOWPOWER    3  /* Low power mode */
-#define DYTC_MODE_BALANCE   0xF  /* Default mode aka balanced */
-
-#define DYTC_SET_COMMAND(function, mode, on) \
-	(DYTC_CMD_SET | (function) << DYTC_SET_FUNCTION_BIT | \
-	 (mode) << DYTC_SET_MODE_BIT | \
-	 (on) << DYTC_SET_VALID_BIT)
-
-#define DYTC_DISABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCE, 0)
-
-#define DYTC_ENABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_BALANCE, 1)
-
 static bool dytc_profile_available;
 static enum platform_profile_option dytc_current_profile;
 static atomic_t dytc_ignore_event = ATOMIC_INIT(0);
 static DEFINE_MUTEX(dytc_mutex);
 
-static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *profile)
-{
-	switch (dytcmode) {
-	case DYTC_MODE_LOWPOWER:
-		*profile = PLATFORM_PROFILE_LOW_POWER;
-		break;
-	case DYTC_MODE_BALANCE:
-		*profile =  PLATFORM_PROFILE_BALANCED;
-		break;
-	case DYTC_MODE_PERFORM:
-		*profile =  PLATFORM_PROFILE_PERFORMANCE;
-		break;
-	default: /* Unknown mode */
-		return -EINVAL;
-	}
-	return 0;
-}
-
-static int convert_profile_to_dytc(enum platform_profile_option profile, int *perfmode)
-{
-	switch (profile) {
-	case PLATFORM_PROFILE_LOW_POWER:
-		*perfmode = DYTC_MODE_LOWPOWER;
-		break;
-	case PLATFORM_PROFILE_BALANCED:
-		*perfmode = DYTC_MODE_BALANCE;
-		break;
-	case PLATFORM_PROFILE_PERFORMANCE:
-		*perfmode = DYTC_MODE_PERFORM;
-		break;
-	default: /* Unknown profile */
-		return -EOPNOTSUPP;
-	}
-	return 0;
-}
-
 /*
  * dytc_profile_get: Function to register with platform_profile
  * handler. Returns current platform profile.