[Intel-gfx] [PATCH] drm/i915: GPIO for BXT generic MIPI

Deepak M m.deepak at intel.com
Wed Mar 2 14:44:14 UTC 2016


Added the BXT GPIO pin configuration and programming logic for
backlight and panel control.

v2 by Deepak
  - Added the GPIO table got BXT.
  - Added gpio_free

v3 by Deepak
  - requesting the gpio once
  - freeing the gpio while unloading

Cc: Jani Nikula <jani.nikula at intel.com>
Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
Signed-off-by: Uma Shankar <uma.shankar at intel.com>
Signed-off-by: Deepak M <m.deepak at intel.com>
---
 drivers/gpu/drm/i915/intel_dsi.c           |   6 +
 drivers/gpu/drm/i915/intel_dsi.h           |   2 +-
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 686 +++++++++++++++++++++++++++++
 3 files changed, 693 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index b928c50..30994f5 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -39,10 +39,12 @@
 static const struct {
 	u16 panel_id;
 	struct drm_panel * (*init)(struct intel_dsi *intel_dsi, u16 panel_id);
+	void (*exit)(struct intel_dsi *intel_dsi);
 } intel_dsi_drivers[] = {
 	{
 		.panel_id = MIPI_DSI_GENERIC_PANEL_ID,
 		.init = vbt_panel_init,
+		.exit = vbt_panel_exit,
 	},
 };
 
@@ -1073,6 +1075,7 @@ static void intel_dsi_connector_destroy(struct drm_connector *connector)
 static void intel_dsi_encoder_destroy(struct drm_encoder *encoder)
 {
 	struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
+	int i;
 
 	if (intel_dsi->panel) {
 		drm_panel_detach(intel_dsi->panel);
@@ -1084,6 +1087,9 @@ static void intel_dsi_encoder_destroy(struct drm_encoder *encoder)
 	if (intel_dsi->gpio_panel)
 		gpiod_put(intel_dsi->gpio_panel);
 
+	for (i = 0; i < ARRAY_SIZE(intel_dsi_drivers); i++)
+		intel_dsi_drivers[i].exit(intel_dsi);
+
 	intel_encoder_destroy(encoder);
 }
 
diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
index de7be7f..2f833b0 100644
--- a/drivers/gpu/drm/i915/intel_dsi.h
+++ b/drivers/gpu/drm/i915/intel_dsi.h
@@ -131,5 +131,5 @@ extern void intel_dsi_reset_clocks(struct intel_encoder *encoder,
 							enum port port);
 
 struct drm_panel *vbt_panel_init(struct intel_dsi *intel_dsi, u16 panel_id);
-
+void vbt_panel_exit(struct intel_dsi *intel_dsi);
 #endif /* _INTEL_DSI_H */
diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index 6b9a1f7..43146f5 100644
--- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
@@ -29,6 +29,7 @@
 #include <drm/drm_edid.h>
 #include <drm/i915_drm.h>
 #include <drm/drm_panel.h>
+#include <linux/gpio.h>
 #include <linux/slab.h>
 #include <video/mipi_display.h>
 #include <asm/intel-mid.h>
@@ -615,6 +616,635 @@ static struct gpio_table gtable[] = {
 	{ VLV_USB_ULPI_0_REFCLK_GPIOS_43_PCONF0, VLV_USB_ULPI_0_REFCLK_GPIOS_43_PAD, 0}
 };
 
+struct bxt_gpio_table {
+	u16 gpio_pin;
+	u16 offset;
+	bool pin_requested;
+};
+
+#define  BXT_HV_DDI0_DDC_SDA_PIN                187
+#define  BXT_HV_DDI0_DDC_SCL_PIN                188
+#define  BXT_HV_DDI1_DDC_SDA_PIN                189
+#define  BXT_HV_DDI1_DDC_SCL_PIN                190
+#define  BXT_DBI_SDA_PIN                        191
+#define  BXT_DBI_SCL_PIN                        192
+#define  BXT_PANEL0_VDDEN_PIN                   193
+#define  BXT_PANEL0_BKLTEN_PIN                  194
+#define  BXT_PANEL0_BKLTCTL_PIN                 195
+#define  BXT_PANEL1_VDDEN_PIN                   196
+#define  BXT_PANEL1_BKLTEN_PIN                  197
+#define  BXT_PANEL1_BKLTCTL_PIN                 198
+#define  BXT_DBI_CSX_PIN                        199
+#define  BXT_DBI_RESX_PIN                       200
+#define  BXT_GP_INTD_DSI_TE1_PIN                201
+#define  BXT_GP_INTD_DSI_TE2_PIN                202
+#define  BXT_USB_OC0_B_PIN                      203
+#define  BXT_USB_OC1_B_PIN                      204
+#define  BXT_MEX_WAKE0_B_PIN                    205
+#define  BXT_MEX_WAKE1_B_PIN                    206
+#define  BXT_EMMC0_CLK_PIN                      156
+#define  BXT_EMMC0_D0_PIN                       157
+#define  BXT_EMMC0_D1_PIN                       158
+#define  BXT_EMMC0_D2_PIN                       159
+#define  BXT_EMMC0_D3_PIN                       160
+#define  BXT_EMMC0_D4_PIN                       161
+#define  BXT_EMMC0_D5_PIN                       162
+#define  BXT_EMMC0_D6_PIN                       163
+#define  BXT_EMMC0_D7_PIN                       164
+#define  BXT_EMMC0_CMD_PIN                      165
+#define  BXT_SDIO_CLK_PIN                       166
+#define  BXT_SDIO_D0_PIN                        167
+#define  BXT_SDIO_D1_PIN                        168
+#define  BXT_SDIO_D2_PIN                        169
+#define  BXT_SDIO_D3_PIN                        170
+#define  BXT_SDIO_CMD_PIN                       171
+#define  BXT_SDCARD_CLK_PIN                     172
+#define  BXT_SDCARD_D0_PIN                      173
+#define  BXT_SDCARD_D1_PIN                      174
+#define  BXT_SDCARD_D2_PIN                      175
+#define  BXT_SDCARD_D3_PIN                      176
+#define  BXT_SDCARD_CD_B_PIN                    177
+#define  BXT_SDCARD_CMD_PIN                     178
+#define  BXT_SDCARD_LVL_CLK_FB_PIN              179
+#define  BXT_SDCARD_LVL_CMD_DIR_PIN             180
+#define  BXT_SDCARD_LVL_DAT_DIR_PIN             181
+#define  BXT_EMMC0_STROBE_PIN                   182
+#define  BXT_SDIO_PWR_DOWN_B_PIN                183
+#define  BXT_SDCARD_PWR_DOWN_B_PIN              184
+#define  BXT_SDCARD_LVL_SEL_PIN                 185
+#define  BXT_SDCARD_LVL_WP_PIN                  186
+#define  BXT_LPSS_I2C0_SDA_PIN                  124
+#define  BXT_LPSS_I2C0_SCL_PIN                  125
+#define  BXT_LPSS_I2C1_SDA_PIN                  126
+#define  BXT_LPSS_I2C1_SCL_PIN                  127
+#define  BXT_LPSS_I2C2_SDA_PIN                  128
+#define  BXT_LPSS_I2C2_SCL_PIN                  129
+#define  BXT_LPSS_I2C3_SDA_PIN                  130
+#define  BXT_LPSS_I2C3_SCL_PIN                  131
+#define  BXT_LPSS_I2C4_SDA_PIN                  132
+#define  BXT_LPSS_I2C4_SCL_PIN                  133
+#define  BXT_LPSS_I2C5_SDA_PIN                  134
+#define  BXT_LPSS_I2C5_SCL_PIN                  135
+#define  BXT_LPSS_I2C6_SDA_PIN                  136
+#define  BXT_LPSS_I2C6_SCL_PIN                  137
+#define  BXT_LPSS_I2C7_SDA_PIN                  138
+#define  BXT_LPSS_I2C7_SCL_PIN                  139
+#define  BXT_ISH_I2C0_SDA_PIN                   140
+#define  BXT_ISH_I2C0_SCL_PIN                   141
+#define  BXT_ISH_I2C1_SDA_PIN                   142
+#define  BXT_ISH_I2C1_SCL_PIN                   143
+#define  BXT_ISH_I2C2_SDA_PIN                   144
+#define  BXT_ISH_I2C2_SCL_PIN                   145
+#define  BXT_ISH_GPIO_0_PIN                     146
+#define  BXT_ISH_GPIO_1_PIN                     147
+#define  BXT_ISH_GPIO_2_PIN                     148
+#define  BXT_ISH_GPIO_3_PIN                     149
+#define  BXT_ISH_GPIO_4_PIN                     150
+#define  BXT_ISH_GPIO_5_PIN                     151
+#define  BXT_ISH_GPIO_6_PIN                     152
+#define  BXT_ISH_GPIO_7_PIN                     153
+#define  BXT_ISH_GPIO_8_PIN                     154
+#define  BXT_ISH_GPIO_9_PIN                     155
+#define  BXT_AVS_I2S1_MCLK_PIN                  74
+#define  BXT_AVS_I2S1_BCLK_PIN                  75
+#define  BXT_AVS_I2S1_WS_SYNC_PIN               76
+#define  BXT_AVS_I2S1_SDI_PIN                   77
+#define  BXT_AVS_I2S1_SDO_PIN                   78
+#define  BXT_AVS_M_CLK_A1_PIN                   79
+#define  BXT_AVS_M_CLK_B1_PIN                   80
+#define  BXT_AVS_M_DATA_1_PIN                   81
+#define  BXT_AVS_M_CLK_AB2_PIN                  82
+#define  BXT_AVS_M_DATA_2_PIN                   83
+#define  BXT_AVS_I2S2_MCLK_PIN                  84
+#define  BXT_AVS_I2S2_BCLK_PIN                  85
+#define  BXT_AVS_I2S2_WS_SYNC_PIN               86
+#define  BXT_AVS_I2S2_SDI_PIN                   87
+#define  BXT_AVS_I2S2_SDO_PIN                   88
+#define  BXT_AVS_I2S3_BCLK_PIN                  89
+#define  BXT_AVS_I2S3_WS_SYNC_PIN               90
+#define  BXT_AVS_I2S3_SDI_PIN                   91
+#define  BXT_AVS_I2S3_SDO_PIN                   92
+#define  BXT_AVS_I2S4_BCLK_PIN                  93
+#define  BXT_AVS_I2S4_WS_SYNC_PIN               94
+#define  BXT_AVS_I2S4_SDI_PIN                   95
+#define  BXT_AVS_I2S4_SDO_PIN                   96
+#define  BXT_FST_SPI_CS0_B_PIN                  97
+#define  BXT_FST_SPI_CS1_B_PIN                  98
+#define  BXT_FST_SPI_MOSI_IO0_PIN               99
+#define  BXT_FST_SPI_MISO_IO1_PIN               100
+#define  BXT_FST_SPI_IO2_PIN                    101
+#define  BXT_FST_SPI_IO3_PIN                    102
+#define  BXT_FST_SPI_CLK_PIN                    103
+#define  BXT_GP_SSP_0_CLK_PIN                   104
+#define  BXT_GP_SSP_0_FS0_PIN                   105
+#define  BXT_GP_SSP_0_FS1_PIN                   106
+#define  BXT_GP_SSP_0_FS2_PIN                   107
+#define  BXT_GP_SSP_0_RXD_PIN                   109
+#define  BXT_GP_SSP_0_TXD_PIN                   110
+#define  BXT_GP_SSP_1_CLK_PIN                   111
+#define  BXT_GP_SSP_1_FS0_PIN                   112
+#define  BXT_GP_SSP_1_FS1_PIN                   113
+#define  BXT_GP_SSP_1_FS2_PIN                   114
+#define  BXT_GP_SSP_1_FS3_PIN                   115
+#define  BXT_GP_SSP_1_RXD_PIN                   116
+#define  BXT_GP_SSP_1_TXD_PIN                   117
+#define  BXT_GP_SSP_2_CLK_PIN                   118
+#define  BXT_GP_SSP_2_FS0_PIN                   119
+#define  BXT_GP_SSP_2_FS1_PIN                   120
+#define  BXT_GP_SSP_2_FS2_PIN                   121
+#define  BXT_GP_SSP_2_RXD_PIN                   122
+#define  BXT_GP_SSP_2_TXD_PIN                   123
+#define  BXT_TRACE_0_CLK_VNN_PIN                0
+#define  BXT_TRACE_0_DATA0_VNN_PIN              1
+#define  BXT_TRACE_0_DATA1_VNN_PIN              2
+#define  BXT_TRACE_0_DATA2_VNN_PIN              3
+#define  BXT_TRACE_0_DATA3_VNN_PIN              4
+#define  BXT_TRACE_0_DATA4_VNN_PIN              5
+#define  BXT_TRACE_0_DATA5_VNN_PIN              6
+#define  BXT_TRACE_0_DATA6_VNN_PIN              7
+#define  BXT_TRACE_0_DATA7_VNN_PIN              8
+#define  BXT_TRACE_1_CLK_VNN_PIN                9
+#define  BXT_TRACE_1_DATA0_VNN_PIN              10
+#define  BXT_TRACE_1_DATA1_VNN_PIN              11
+#define  BXT_TRACE_1_DATA2_VNN_PIN              12
+#define  BXT_TRACE_1_DATA3_VNN_PIN              13
+#define  BXT_TRACE_1_DATA4_VNN_PIN              14
+#define  BXT_TRACE_1_DATA5_VNN_PIN              15
+#define  BXT_TRACE_1_DATA6_VNN_PIN              16
+#define  BXT_TRACE_1_DATA7_VNN_PIN              17
+#define  BXT_TRACE_2_CLK_VNN_PIN                18
+#define  BXT_TRACE_2_DATA0_VNN_PIN              19
+#define  BXT_TRACE_2_DATA1_VNN_PIN              20
+#define  BXT_TRACE_2_DATA2_VNN_PIN              21
+#define  BXT_TRACE_2_DATA3_VNN_PIN              22
+#define  BXT_TRACE_2_DATA4_VNN_PIN              23
+#define  BXT_TRACE_2_DATA5_VNN_PIN              24
+#define  BXT_TRACE_2_DATA6_VNN_PIN              25
+#define  BXT_TRACE_2_DATA7_VNN_PIN              26
+#define  BXT_TRIGOUT_0_PIN                      27
+#define  BXT_TRIGOUT_1_PIN                      28
+#define  BXT_TRIGIN_0_PIN                       29
+#define  BXT_SEC_TCK_PIN                        30
+#define  BXT_SEC_TDI_PIN                        31
+#define  BXT_SEC_TMS_PIN                        32
+#define  BXT_SEC_TDO_PIN                        33
+#define  BXT_PWM0_PIN                           34
+#define  BXT_PWM1_PIN                           35
+#define  BXT_PWM2_PIN                           36
+#define  BXT_PWM3_PIN                           37
+#define  BXT_LPSS_UART0_RXD_PIN                 38
+#define  BXT_LPSS_UART0_TXD_PIN                 39
+#define  BXT_LPSS_UART0_RTS_B_PIN               40
+#define  BXT_LPSS_UART0_CTS_B_PIN               41
+#define  BXT_LPSS_UART1_RXD_PIN                 42
+#define  BXT_LPSS_UART1_TXD_PIN                 43
+#define  BXT_LPSS_UART1_RTS_B_PIN               44
+#define  BXT_LPSS_UART1_CTS_B_PIN               45
+#define  BXT_LPSS_UART2_RXD_PIN                 46
+#define  BXT_LPSS_UART2_TXD_PIN                 47
+#define  BXT_LPSS_UART2_RTS_B_PIN               48
+#define  BXT_LPSS_UART2_CTS_B_PIN               49
+#define  BXT_ISH_UART0_RXD_PIN                  50
+#define  BXT_ISH_UART0_TXD_PIN                  51
+#define  BXT_ISH_UART0_RTS_B_PIN                52
+#define  BXT_ISH_UART0_CTS_B_PIN                53
+#define  BXT_ISH_UART1_RXD_PIN                  54
+#define  BXT_ISH_UART1_TXD_PIN                  55
+#define  BXT_ISH_UART1_RTS_B_PIN                56
+#define  BXT_ISH_UART1_CTS_B_PIN                57
+#define  BXT_ISH_UART2_RXD_PIN                  58
+#define  BXT_ISH_UART2_TXD_PIN                  59
+#define  BXT_ISH_UART2_RTS_B_PIN                60
+#define  BXT_ISH_UART2_CTS_B_PIN                61
+#define  BXT_GP_CAMERASB00_PIN                  62
+#define  BXT_GP_CAMERASB01_PIN                  63
+#define  BXT_GP_CAMERASB02_PIN                  64
+#define  BXT_GP_CAMERASB03_PIN                  65
+#define  BXT_GP_CAMERASB04_PIN                  66
+#define  BXT_GP_CAMERASB05_PIN                  67
+#define  BXT_GP_CAMERASB06_PIN                  68
+#define  BXT_GP_CAMERASB07_PIN                  69
+#define  BXT_GP_CAMERASB08_PIN                  70
+#define  BXT_GP_CAMERASB09_PIN                  71
+#define  BXT_GP_CAMERASB10_PIN                  72
+#define  BXT_GP_CAMERASB11_PIN                  73
+
+#define  BXT_HV_DDI0_DDC_SDA_OFFSET             264
+#define  BXT_HV_DDI0_DDC_SCL_OFFSET             265
+#define  BXT_HV_DDI1_DDC_SDA_OFFSET             266
+#define  BXT_HV_DDI1_DDC_SCL_OFFSET             267
+#define  BXT_DBI_SDA_OFFSET             268
+#define  BXT_DBI_SCL_OFFSET             269
+#define  BXT_PANEL0_VDDEN_OFFSET                270
+#define  BXT_PANEL0_BKLTEN_OFFSET               271
+#define  BXT_PANEL0_BKLTCTL_OFFSET              272
+#define  BXT_PANEL1_VDDEN_OFFSET                273
+#define  BXT_PANEL1_BKLTEN_OFFSET               274
+#define  BXT_PANEL1_BKLTCTL_OFFSET              275
+#define  BXT_DBI_CSX_OFFSET             276
+#define  BXT_DBI_RESX_OFFSET            277
+#define  BXT_GP_INTD_DSI_TE1_OFFSET             278
+#define  BXT_GP_INTD_DSI_TE2_OFFSET             279
+#define  BXT_USB_OC0_B_OFFSET           280
+#define  BXT_USB_OC1_B_OFFSET           281
+#define  BXT_MEX_WAKE0_B_OFFSET         282
+#define  BXT_MEX_WAKE1_B_OFFSET         283
+#define  BXT_EMMC0_CLK_OFFSET           284
+#define  BXT_EMMC0_D0_OFFSET            285
+#define  BXT_EMMC0_D1_OFFSET            286
+#define  BXT_EMMC0_D2_OFFSET            287
+#define  BXT_EMMC0_D3_OFFSET            288
+#define  BXT_EMMC0_D4_OFFSET            289
+#define  BXT_EMMC0_D5_OFFSET            290
+#define  BXT_EMMC0_D6_OFFSET            291
+#define  BXT_EMMC0_D7_OFFSET            292
+#define  BXT_EMMC0_CMD_OFFSET           293
+#define  BXT_SDIO_CLK_OFFSET            294
+#define  BXT_SDIO_D0_OFFSET             295
+#define  BXT_SDIO_D1_OFFSET             296
+#define  BXT_SDIO_D2_OFFSET             297
+#define  BXT_SDIO_D3_OFFSET             298
+#define  BXT_SDIO_CMD_OFFSET            299
+#define  BXT_SDCARD_CLK_OFFSET          300
+#define  BXT_SDCARD_D0_OFFSET           301
+#define  BXT_SDCARD_D1_OFFSET           302
+#define  BXT_SDCARD_D2_OFFSET           303
+#define  BXT_SDCARD_D3_OFFSET           304
+#define  BXT_SDCARD_CD_B_OFFSET         305
+#define  BXT_SDCARD_CMD_OFFSET          306
+#define  BXT_SDCARD_LVL_CLK_FB_OFFSET           307
+#define  BXT_SDCARD_LVL_CMD_DIR_OFFSET          308
+#define  BXT_SDCARD_LVL_DAT_DIR_OFFSET          309
+#define  BXT_EMMC0_STROBE_OFFSET                310
+#define  BXT_SDIO_PWR_DOWN_B_OFFSET             311
+#define  BXT_SDCARD_PWR_DOWN_B_OFFSET           312
+#define  BXT_SDCARD_LVL_SEL_OFFSET              313
+#define  BXT_SDCARD_LVL_WP_OFFSET               314
+#define  BXT_LPSS_I2C0_SDA_OFFSET               315
+#define  BXT_LPSS_I2C0_SCL_OFFSET               316
+#define  BXT_LPSS_I2C1_SDA_OFFSET               317
+#define  BXT_LPSS_I2C1_SCL_OFFSET               318
+#define  BXT_LPSS_I2C2_SDA_OFFSET               319
+#define  BXT_LPSS_I2C2_SCL_OFFSET               320
+#define  BXT_LPSS_I2C3_SDA_OFFSET               321
+#define  BXT_LPSS_I2C3_SCL_OFFSET               322
+#define  BXT_LPSS_I2C4_SDA_OFFSET               323
+#define  BXT_LPSS_I2C4_SCL_OFFSET               324
+#define  BXT_LPSS_I2C5_SDA_OFFSET               325
+#define  BXT_LPSS_I2C5_SCL_OFFSET               326
+#define  BXT_LPSS_I2C6_SDA_OFFSET               327
+#define  BXT_LPSS_I2C6_SCL_OFFSET               328
+#define  BXT_LPSS_I2C7_SDA_OFFSET               329
+#define  BXT_LPSS_I2C7_SCL_OFFSET               330
+#define  BXT_ISH_I2C0_SDA_OFFSET                331
+#define  BXT_ISH_I2C0_SCL_OFFSET                332
+#define  BXT_ISH_I2C1_SDA_OFFSET                333
+#define  BXT_ISH_I2C1_SCL_OFFSET                334
+#define  BXT_ISH_I2C2_SDA_OFFSET                335
+#define  BXT_ISH_I2C2_SCL_OFFSET                336
+#define  BXT_ISH_GPIO_0_OFFSET          337
+#define  BXT_ISH_GPIO_1_OFFSET          338
+#define  BXT_ISH_GPIO_2_OFFSET          339
+#define  BXT_ISH_GPIO_3_OFFSET          340
+#define  BXT_ISH_GPIO_4_OFFSET          341
+#define  BXT_ISH_GPIO_5_OFFSET          342
+#define  BXT_ISH_GPIO_6_OFFSET          343
+#define  BXT_ISH_GPIO_7_OFFSET          344
+#define  BXT_ISH_GPIO_8_OFFSET          345
+#define  BXT_ISH_GPIO_9_OFFSET          346
+#define  BXT_AVS_I2S1_MCLK_OFFSET               378
+#define  BXT_AVS_I2S1_BCLK_OFFSET               379
+#define  BXT_AVS_I2S1_WS_SYNC_OFFSET            380
+#define  BXT_AVS_I2S1_SDI_OFFSET                381
+#define  BXT_AVS_I2S1_SDO_OFFSET                382
+#define  BXT_AVS_M_CLK_A1_OFFSET                383
+#define  BXT_AVS_M_CLK_B1_OFFSET                384
+#define  BXT_AVS_M_DATA_1_OFFSET                385
+#define  BXT_AVS_M_CLK_AB2_OFFSET               386
+#define  BXT_AVS_M_DATA_2_OFFSET                387
+#define  BXT_AVS_I2S2_MCLK_OFFSET               388
+#define  BXT_AVS_I2S2_BCLK_OFFSET               389
+#define  BXT_AVS_I2S2_WS_SYNC_OFFSET            390
+#define  BXT_AVS_I2S2_SDI_OFFSET                391
+#define  BXT_AVS_I2S2_SDO_OFFSET                392
+#define  BXT_AVS_I2S3_BCLK_OFFSET               393
+#define  BXT_AVS_I2S3_WS_SYNC_OFFSET            394
+#define  BXT_AVS_I2S3_SDI_OFFSET                395
+#define  BXT_AVS_I2S3_SDO_OFFSET                396
+#define  BXT_AVS_I2S4_BCLK_OFFSET               397
+#define  BXT_AVS_I2S4_WS_SYNC_OFFSET            398
+#define  BXT_AVS_I2S4_SDI_OFFSET                399
+#define  BXT_AVS_I2S4_SDO_OFFSET                400
+#define  BXT_FST_SPI_CS0_B_OFFSET               402
+#define  BXT_FST_SPI_CS1_B_OFFSET               403
+#define  BXT_FST_SPI_MOSI_IO0_OFFSET            404
+#define  BXT_FST_SPI_MISO_IO1_OFFSET            405
+#define  BXT_FST_SPI_IO2_OFFSET         406
+#define  BXT_FST_SPI_IO3_OFFSET         407
+#define  BXT_FST_SPI_CLK_OFFSET         408
+#define  BXT_GP_SSP_0_CLK_OFFSET                410
+#define  BXT_GP_SSP_0_FS0_OFFSET                411
+#define  BXT_GP_SSP_0_FS1_OFFSET                412
+#define  BXT_GP_SSP_0_FS2_OFFSET                413
+#define  BXT_GP_SSP_0_RXD_OFFSET                414
+#define  BXT_GP_SSP_0_TXD_OFFSET                415
+#define  BXT_GP_SSP_1_CLK_OFFSET                416
+#define  BXT_GP_SSP_1_FS0_OFFSET                417
+#define  BXT_GP_SSP_1_FS1_OFFSET                418
+#define  BXT_GP_SSP_1_FS2_OFFSET                419
+#define  BXT_GP_SSP_1_FS3_OFFSET                420
+#define  BXT_GP_SSP_1_RXD_OFFSET                421
+#define  BXT_GP_SSP_1_TXD_OFFSET                422
+#define  BXT_GP_SSP_2_CLK_OFFSET                423
+#define  BXT_GP_SSP_2_FS0_OFFSET                424
+#define  BXT_GP_SSP_2_FS1_OFFSET                425
+#define  BXT_GP_SSP_2_FS2_OFFSET                426
+#define  BXT_GP_SSP_2_RXD_OFFSET                427
+#define  BXT_GP_SSP_2_TXD_OFFSET                428
+#define  BXT_TRACE_0_CLK_VNN_OFFSET             429
+#define  BXT_TRACE_0_DATA0_VNN_OFFSET           430
+#define  BXT_TRACE_0_DATA1_VNN_OFFSET           431
+#define  BXT_TRACE_0_DATA2_VNN_OFFSET           432
+#define  BXT_TRACE_0_DATA3_VNN_OFFSET           433
+#define  BXT_TRACE_0_DATA4_VNN_OFFSET           434
+#define  BXT_TRACE_0_DATA5_VNN_OFFSET           435
+#define  BXT_TRACE_0_DATA6_VNN_OFFSET           436
+#define  BXT_TRACE_0_DATA7_VNN_OFFSET           437
+#define  BXT_TRACE_1_CLK_VNN_OFFSET             438
+#define  BXT_TRACE_1_DATA0_VNN_OFFSET           439
+#define  BXT_TRACE_1_DATA1_VNN_OFFSET           440
+#define  BXT_TRACE_1_DATA2_VNN_OFFSET           441
+#define  BXT_TRACE_1_DATA3_VNN_OFFSET           442
+#define  BXT_TRACE_1_DATA4_VNN_OFFSET           443
+#define  BXT_TRACE_1_DATA5_VNN_OFFSET           444
+#define  BXT_TRACE_1_DATA6_VNN_OFFSET           445
+#define  BXT_TRACE_1_DATA7_VNN_OFFSET           446
+#define  BXT_TRACE_2_CLK_VNN_OFFSET             447
+#define  BXT_TRACE_2_DATA0_VNN_OFFSET           448
+#define  BXT_TRACE_2_DATA1_VNN_OFFSET           449
+#define  BXT_TRACE_2_DATA2_VNN_OFFSET           450
+#define  BXT_TRACE_2_DATA3_VNN_OFFSET           451
+#define  BXT_TRACE_2_DATA4_VNN_OFFSET           452
+#define  BXT_TRACE_2_DATA5_VNN_OFFSET           453
+#define  BXT_TRACE_2_DATA6_VNN_OFFSET           454
+#define  BXT_TRACE_2_DATA7_VNN_OFFSET           455
+#define  BXT_TRIGOUT_0_OFFSET           456
+#define  BXT_TRIGOUT_1_OFFSET           457
+#define  BXT_TRIGIN_0_OFFSET            458
+#define  BXT_SEC_TCK_OFFSET             459
+#define  BXT_SEC_TDI_OFFSET             460
+#define  BXT_SEC_TMS_OFFSET             461
+#define  BXT_SEC_TDO_OFFSET             462
+#define  BXT_PWM0_OFFSET                463
+#define  BXT_PWM1_OFFSET                464
+#define  BXT_PWM2_OFFSET                465
+#define  BXT_PWM3_OFFSET                466
+#define  BXT_LPSS_UART0_RXD_OFFSET              467
+#define  BXT_LPSS_UART0_TXD_OFFSET              468
+#define  BXT_LPSS_UART0_RTS_B_OFFSET            469
+#define  BXT_LPSS_UART0_CTS_B_OFFSET            470
+#define  BXT_LPSS_UART1_RXD_OFFSET              471
+#define  BXT_LPSS_UART1_TXD_OFFSET              472
+#define  BXT_LPSS_UART1_RTS_B_OFFSET            473
+#define  BXT_LPSS_UART1_CTS_B_OFFSET            474
+#define  BXT_LPSS_UART2_RXD_OFFSET              475
+#define  BXT_LPSS_UART2_TXD_OFFSET              476
+#define  BXT_LPSS_UART2_RTS_B_OFFSET            477
+#define  BXT_LPSS_UART2_CTS_B_OFFSET            478
+#define  BXT_ISH_UART0_RXD_OFFSET               479
+#define  BXT_ISH_UART0_TXD_OFFSET               480
+#define  BXT_ISH_UART0_RTS_B_OFFSET             481
+#define  BXT_ISH_UART0_CTS_B_OFFSET             482
+#define  BXT_ISH_UART1_RXD_OFFSET               483
+#define  BXT_ISH_UART1_TXD_OFFSET               484
+#define  BXT_ISH_UART1_RTS_B_OFFSET             485
+#define  BXT_ISH_UART1_CTS_B_OFFSET             486
+#define  BXT_ISH_UART2_RXD_OFFSET               487
+#define  BXT_ISH_UART2_TXD_OFFSET               488
+#define  BXT_ISH_UART2_RTS_B_OFFSET             489
+#define  BXT_ISH_UART2_CTS_B_OFFSET             490
+#define  BXT_GP_CAMERASB00_OFFSET               491
+#define  BXT_GP_CAMERASB01_OFFSET               492
+#define  BXT_GP_CAMERASB02_OFFSET               493
+#define  BXT_GP_CAMERASB03_OFFSET               494
+#define  BXT_GP_CAMERASB04_OFFSET               495
+#define  BXT_GP_CAMERASB05_OFFSET               496
+#define  BXT_GP_CAMERASB06_OFFSET               497
+#define  BXT_GP_CAMERASB07_OFFSET               498
+#define  BXT_GP_CAMERASB08_OFFSET               499
+#define  BXT_GP_CAMERASB09_OFFSET               500
+#define  BXT_GP_CAMERASB10_OFFSET               501
+#define  BXT_GP_CAMERASB11_OFFSET               502
+
+static struct bxt_gpio_table bxt_gtable[] = {
+	{BXT_HV_DDI0_DDC_SDA_PIN, BXT_HV_DDI0_DDC_SDA_OFFSET},
+	{BXT_HV_DDI0_DDC_SCL_PIN, BXT_HV_DDI0_DDC_SCL_OFFSET},
+	{BXT_HV_DDI1_DDC_SDA_PIN, BXT_HV_DDI1_DDC_SDA_OFFSET},
+	{BXT_HV_DDI1_DDC_SCL_PIN, BXT_HV_DDI1_DDC_SCL_OFFSET},
+	{BXT_DBI_SDA_PIN, BXT_DBI_SDA_OFFSET},
+	{BXT_DBI_SCL_PIN, BXT_DBI_SCL_OFFSET},
+	{BXT_PANEL0_VDDEN_PIN, BXT_PANEL0_VDDEN_OFFSET},
+	{BXT_PANEL0_BKLTEN_PIN, BXT_PANEL0_BKLTEN_OFFSET},
+	{BXT_PANEL0_BKLTCTL_PIN, BXT_PANEL0_BKLTCTL_OFFSET},
+	{BXT_PANEL1_VDDEN_PIN, BXT_PANEL1_VDDEN_OFFSET},
+	{BXT_PANEL1_BKLTEN_PIN, BXT_PANEL1_BKLTEN_OFFSET},
+	{BXT_PANEL1_BKLTCTL_PIN, BXT_PANEL1_BKLTCTL_OFFSET},
+	{BXT_DBI_CSX_PIN, BXT_DBI_CSX_OFFSET},
+	{BXT_DBI_RESX_PIN, BXT_DBI_RESX_OFFSET},
+	{BXT_GP_INTD_DSI_TE1_PIN, BXT_GP_INTD_DSI_TE1_OFFSET},
+	{BXT_GP_INTD_DSI_TE2_PIN, BXT_GP_INTD_DSI_TE2_OFFSET},
+	{BXT_USB_OC0_B_PIN, BXT_USB_OC0_B_OFFSET},
+	{BXT_USB_OC1_B_PIN, BXT_USB_OC1_B_OFFSET},
+	{BXT_MEX_WAKE0_B_PIN, BXT_MEX_WAKE0_B_OFFSET},
+	{BXT_MEX_WAKE1_B_PIN, BXT_MEX_WAKE1_B_OFFSET},
+	{BXT_EMMC0_CLK_PIN, BXT_EMMC0_CLK_OFFSET},
+	{BXT_EMMC0_D0_PIN, BXT_EMMC0_D0_OFFSET},
+	{BXT_EMMC0_D1_PIN, BXT_EMMC0_D1_OFFSET},
+	{BXT_EMMC0_D2_PIN, BXT_EMMC0_D2_OFFSET},
+	{BXT_EMMC0_D3_PIN, BXT_EMMC0_D3_OFFSET},
+	{BXT_EMMC0_D4_PIN, BXT_EMMC0_D4_OFFSET},
+	{BXT_EMMC0_D5_PIN, BXT_EMMC0_D5_OFFSET},
+	{BXT_EMMC0_D6_PIN, BXT_EMMC0_D6_OFFSET},
+	{BXT_EMMC0_D7_PIN, BXT_EMMC0_D7_OFFSET},
+	{BXT_EMMC0_CMD_PIN, BXT_EMMC0_CMD_OFFSET},
+	{BXT_SDIO_CLK_PIN, BXT_SDIO_CLK_OFFSET},
+	{BXT_SDIO_D0_PIN, BXT_SDIO_D0_OFFSET},
+	{BXT_SDIO_D1_PIN, BXT_SDIO_D1_OFFSET},
+	{BXT_SDIO_D2_PIN, BXT_SDIO_D2_OFFSET},
+	{BXT_SDIO_D3_PIN, BXT_SDIO_D3_OFFSET},
+	{BXT_SDIO_CMD_PIN, BXT_SDIO_CMD_OFFSET},
+	{BXT_SDCARD_CLK_PIN, BXT_SDCARD_CLK_OFFSET},
+	{BXT_SDCARD_D0_PIN, BXT_SDCARD_D0_OFFSET},
+	{BXT_SDCARD_D1_PIN, BXT_SDCARD_D1_OFFSET},
+	{BXT_SDCARD_D2_PIN, BXT_SDCARD_D2_OFFSET},
+	{BXT_SDCARD_D3_PIN, BXT_SDCARD_D3_OFFSET},
+	{BXT_SDCARD_CD_B_PIN, BXT_SDCARD_CD_B_OFFSET},
+	{BXT_SDCARD_CMD_PIN, BXT_SDCARD_CMD_OFFSET},
+	{BXT_SDCARD_LVL_CLK_FB_PIN, BXT_SDCARD_LVL_CLK_FB_OFFSET},
+	{BXT_SDCARD_LVL_CMD_DIR_PIN, BXT_SDCARD_LVL_CMD_DIR_OFFSET},
+	{BXT_SDCARD_LVL_DAT_DIR_PIN, BXT_SDCARD_LVL_DAT_DIR_OFFSET},
+	{BXT_EMMC0_STROBE_PIN, BXT_EMMC0_STROBE_OFFSET},
+	{BXT_SDIO_PWR_DOWN_B_PIN, BXT_SDIO_PWR_DOWN_B_OFFSET},
+	{BXT_SDCARD_PWR_DOWN_B_PIN, BXT_SDCARD_PWR_DOWN_B_OFFSET},
+	{BXT_SDCARD_LVL_SEL_PIN, BXT_SDCARD_LVL_SEL_OFFSET},
+	{BXT_SDCARD_LVL_WP_PIN, BXT_SDCARD_LVL_WP_OFFSET},
+	{BXT_LPSS_I2C0_SDA_PIN, BXT_LPSS_I2C0_SDA_OFFSET},
+	{BXT_LPSS_I2C0_SCL_PIN, BXT_LPSS_I2C0_SCL_OFFSET},
+	{BXT_LPSS_I2C1_SDA_PIN, BXT_LPSS_I2C1_SDA_OFFSET},
+	{BXT_LPSS_I2C1_SCL_PIN, BXT_LPSS_I2C1_SCL_OFFSET},
+	{BXT_LPSS_I2C2_SDA_PIN, BXT_LPSS_I2C2_SDA_OFFSET},
+	{BXT_LPSS_I2C2_SCL_PIN, BXT_LPSS_I2C2_SCL_OFFSET},
+	{BXT_LPSS_I2C3_SDA_PIN, BXT_LPSS_I2C3_SDA_OFFSET},
+	{BXT_LPSS_I2C3_SCL_PIN, BXT_LPSS_I2C3_SCL_OFFSET},
+	{BXT_LPSS_I2C4_SDA_PIN, BXT_LPSS_I2C4_SDA_OFFSET},
+	{BXT_LPSS_I2C4_SCL_PIN, BXT_LPSS_I2C4_SCL_OFFSET},
+	{BXT_LPSS_I2C5_SDA_PIN, BXT_LPSS_I2C5_SDA_OFFSET},
+	{BXT_LPSS_I2C5_SCL_PIN, BXT_LPSS_I2C5_SCL_OFFSET},
+	{BXT_LPSS_I2C6_SDA_PIN, BXT_LPSS_I2C6_SDA_OFFSET},
+	{BXT_LPSS_I2C6_SCL_PIN, BXT_LPSS_I2C6_SCL_OFFSET},
+	{BXT_LPSS_I2C7_SDA_PIN, BXT_LPSS_I2C7_SDA_OFFSET},
+	{BXT_LPSS_I2C7_SCL_PIN, BXT_LPSS_I2C7_SCL_OFFSET},
+	{BXT_ISH_I2C0_SDA_PIN, BXT_ISH_I2C0_SDA_OFFSET},
+	{BXT_ISH_I2C0_SCL_PIN, BXT_ISH_I2C0_SCL_OFFSET},
+	{BXT_ISH_I2C1_SDA_PIN, BXT_ISH_I2C1_SDA_OFFSET},
+	{BXT_ISH_I2C1_SCL_PIN, BXT_ISH_I2C1_SCL_OFFSET},
+	{BXT_ISH_I2C2_SDA_PIN, BXT_ISH_I2C2_SDA_OFFSET},
+	{BXT_ISH_I2C2_SCL_PIN, BXT_ISH_I2C2_SCL_OFFSET},
+	{BXT_ISH_GPIO_0_PIN, BXT_ISH_GPIO_0_OFFSET},
+	{BXT_ISH_GPIO_1_PIN, BXT_ISH_GPIO_1_OFFSET},
+	{BXT_ISH_GPIO_2_PIN, BXT_ISH_GPIO_2_OFFSET},
+	{BXT_ISH_GPIO_3_PIN, BXT_ISH_GPIO_3_OFFSET},
+	{BXT_ISH_GPIO_4_PIN, BXT_ISH_GPIO_4_OFFSET},
+	{BXT_ISH_GPIO_5_PIN, BXT_ISH_GPIO_5_OFFSET},
+	{BXT_ISH_GPIO_6_PIN, BXT_ISH_GPIO_6_OFFSET},
+	{BXT_ISH_GPIO_7_PIN, BXT_ISH_GPIO_7_OFFSET},
+	{BXT_ISH_GPIO_8_PIN, BXT_ISH_GPIO_8_OFFSET},
+	{BXT_ISH_GPIO_9_PIN, BXT_ISH_GPIO_9_OFFSET},
+	{BXT_AVS_I2S1_MCLK_PIN, BXT_AVS_I2S1_MCLK_OFFSET},
+	{BXT_AVS_I2S1_BCLK_PIN, BXT_AVS_I2S1_BCLK_OFFSET},
+	{BXT_AVS_I2S1_WS_SYNC_PIN, BXT_AVS_I2S1_WS_SYNC_OFFSET},
+	{BXT_AVS_I2S1_SDI_PIN, BXT_AVS_I2S1_SDI_OFFSET},
+	{BXT_AVS_I2S1_SDO_PIN, BXT_AVS_I2S1_SDO_OFFSET},
+	{BXT_AVS_M_CLK_A1_PIN, BXT_AVS_M_CLK_A1_OFFSET},
+	{BXT_AVS_M_CLK_B1_PIN, BXT_AVS_M_CLK_B1_OFFSET},
+	{BXT_AVS_M_DATA_1_PIN, BXT_AVS_M_DATA_1_OFFSET},
+	{BXT_AVS_M_CLK_AB2_PIN, BXT_AVS_M_CLK_AB2_OFFSET},
+	{BXT_AVS_M_DATA_2_PIN, BXT_AVS_M_DATA_2_OFFSET},
+	{BXT_AVS_I2S2_MCLK_PIN, BXT_AVS_I2S2_MCLK_OFFSET},
+	{BXT_AVS_I2S2_BCLK_PIN, BXT_AVS_I2S2_BCLK_OFFSET},
+	{BXT_AVS_I2S2_WS_SYNC_PIN, BXT_AVS_I2S2_WS_SYNC_OFFSET},
+	{BXT_AVS_I2S2_SDI_PIN, BXT_AVS_I2S2_SDI_OFFSET},
+	{BXT_AVS_I2S2_SDO_PIN, BXT_AVS_I2S2_SDO_OFFSET},
+	{BXT_AVS_I2S3_BCLK_PIN, BXT_AVS_I2S3_BCLK_OFFSET},
+	{BXT_AVS_I2S3_WS_SYNC_PIN, BXT_AVS_I2S3_WS_SYNC_OFFSET},
+	{BXT_AVS_I2S3_SDI_PIN, BXT_AVS_I2S3_SDI_OFFSET},
+	{BXT_AVS_I2S3_SDO_PIN, BXT_AVS_I2S3_SDO_OFFSET},
+	{BXT_AVS_I2S4_BCLK_PIN, BXT_AVS_I2S4_BCLK_OFFSET},
+	{BXT_AVS_I2S4_WS_SYNC_PIN, BXT_AVS_I2S4_WS_SYNC_OFFSET},
+	{BXT_AVS_I2S4_SDI_PIN, BXT_AVS_I2S4_SDI_OFFSET},
+	{BXT_AVS_I2S4_SDO_PIN, BXT_AVS_I2S4_SDO_OFFSET},
+	{BXT_FST_SPI_CS0_B_PIN, BXT_FST_SPI_CS0_B_OFFSET},
+	{BXT_FST_SPI_CS1_B_PIN, BXT_FST_SPI_CS1_B_OFFSET},
+	{BXT_FST_SPI_MOSI_IO0_PIN, BXT_FST_SPI_MOSI_IO0_OFFSET},
+	{BXT_FST_SPI_MISO_IO1_PIN, BXT_FST_SPI_MISO_IO1_OFFSET},
+	{BXT_FST_SPI_IO2_PIN, BXT_FST_SPI_IO2_OFFSET},
+	{BXT_FST_SPI_IO3_PIN, BXT_FST_SPI_IO3_OFFSET},
+	{BXT_FST_SPI_CLK_PIN, BXT_FST_SPI_CLK_OFFSET},
+	{BXT_GP_SSP_0_CLK_PIN, BXT_GP_SSP_0_CLK_OFFSET},
+	{BXT_GP_SSP_0_FS0_PIN, BXT_GP_SSP_0_FS0_OFFSET},
+	{BXT_GP_SSP_0_FS1_PIN, BXT_GP_SSP_0_FS1_OFFSET},
+	{BXT_GP_SSP_0_FS2_PIN, BXT_GP_SSP_0_FS2_OFFSET},
+	{BXT_GP_SSP_0_RXD_PIN, BXT_GP_SSP_0_RXD_OFFSET},
+	{BXT_GP_SSP_0_TXD_PIN, BXT_GP_SSP_0_TXD_OFFSET},
+	{BXT_GP_SSP_1_CLK_PIN, BXT_GP_SSP_1_CLK_OFFSET},
+	{BXT_GP_SSP_1_FS0_PIN, BXT_GP_SSP_1_FS0_OFFSET},
+	{BXT_GP_SSP_1_FS1_PIN, BXT_GP_SSP_1_FS1_OFFSET},
+	{BXT_GP_SSP_1_FS2_PIN, BXT_GP_SSP_1_FS2_OFFSET},
+	{BXT_GP_SSP_1_FS3_PIN, BXT_GP_SSP_1_FS3_OFFSET},
+	{BXT_GP_SSP_1_RXD_PIN, BXT_GP_SSP_1_RXD_OFFSET},
+	{BXT_GP_SSP_1_TXD_PIN, BXT_GP_SSP_1_TXD_OFFSET},
+	{BXT_GP_SSP_2_CLK_PIN, BXT_GP_SSP_2_CLK_OFFSET},
+	{BXT_GP_SSP_2_FS0_PIN, BXT_GP_SSP_2_FS0_OFFSET},
+	{BXT_GP_SSP_2_FS1_PIN, BXT_GP_SSP_2_FS1_OFFSET},
+	{BXT_GP_SSP_2_FS2_PIN, BXT_GP_SSP_2_FS2_OFFSET},
+	{BXT_GP_SSP_2_RXD_PIN, BXT_GP_SSP_2_RXD_OFFSET},
+	{BXT_GP_SSP_2_TXD_PIN, BXT_GP_SSP_2_TXD_OFFSET},
+	{BXT_TRACE_0_CLK_VNN_PIN, BXT_TRACE_0_CLK_VNN_OFFSET},
+	{BXT_TRACE_0_DATA0_VNN_PIN, BXT_TRACE_0_DATA0_VNN_OFFSET},
+	{BXT_TRACE_0_DATA1_VNN_PIN, BXT_TRACE_0_DATA1_VNN_OFFSET},
+	{BXT_TRACE_0_DATA2_VNN_PIN, BXT_TRACE_0_DATA2_VNN_OFFSET},
+	{BXT_TRACE_0_DATA3_VNN_PIN, BXT_TRACE_0_DATA3_VNN_OFFSET},
+	{BXT_TRACE_0_DATA4_VNN_PIN, BXT_TRACE_0_DATA4_VNN_OFFSET},
+	{BXT_TRACE_0_DATA5_VNN_PIN, BXT_TRACE_0_DATA5_VNN_OFFSET},
+	{BXT_TRACE_0_DATA6_VNN_PIN, BXT_TRACE_0_DATA6_VNN_OFFSET},
+	{BXT_TRACE_0_DATA7_VNN_PIN, BXT_TRACE_0_DATA7_VNN_OFFSET},
+	{BXT_TRACE_1_CLK_VNN_PIN, BXT_TRACE_1_CLK_VNN_OFFSET},
+	{BXT_TRACE_1_DATA0_VNN_PIN, BXT_TRACE_1_DATA0_VNN_OFFSET},
+	{BXT_TRACE_1_DATA1_VNN_PIN, BXT_TRACE_1_DATA1_VNN_OFFSET},
+	{BXT_TRACE_1_DATA2_VNN_PIN, BXT_TRACE_1_DATA2_VNN_OFFSET},
+	{BXT_TRACE_1_DATA3_VNN_PIN, BXT_TRACE_1_DATA3_VNN_OFFSET},
+	{BXT_TRACE_1_DATA4_VNN_PIN, BXT_TRACE_1_DATA4_VNN_OFFSET},
+	{BXT_TRACE_1_DATA5_VNN_PIN, BXT_TRACE_1_DATA5_VNN_OFFSET},
+	{BXT_TRACE_1_DATA6_VNN_PIN, BXT_TRACE_1_DATA6_VNN_OFFSET},
+	{BXT_TRACE_1_DATA7_VNN_PIN, BXT_TRACE_1_DATA7_VNN_OFFSET},
+	{BXT_TRACE_2_CLK_VNN_PIN, BXT_TRACE_2_CLK_VNN_OFFSET},
+	{BXT_TRACE_2_DATA0_VNN_PIN, BXT_TRACE_2_DATA0_VNN_OFFSET},
+	{BXT_TRACE_2_DATA1_VNN_PIN, BXT_TRACE_2_DATA1_VNN_OFFSET},
+	{BXT_TRACE_2_DATA2_VNN_PIN, BXT_TRACE_2_DATA2_VNN_OFFSET},
+	{BXT_TRACE_2_DATA3_VNN_PIN, BXT_TRACE_2_DATA3_VNN_OFFSET},
+	{BXT_TRACE_2_DATA4_VNN_PIN, BXT_TRACE_2_DATA4_VNN_OFFSET},
+	{BXT_TRACE_2_DATA5_VNN_PIN, BXT_TRACE_2_DATA5_VNN_OFFSET},
+	{BXT_TRACE_2_DATA6_VNN_PIN, BXT_TRACE_2_DATA6_VNN_OFFSET},
+	{BXT_TRACE_2_DATA7_VNN_PIN, BXT_TRACE_2_DATA7_VNN_OFFSET},
+	{BXT_TRIGOUT_0_PIN, BXT_TRIGOUT_0_OFFSET},
+	{BXT_TRIGOUT_1_PIN, BXT_TRIGOUT_1_OFFSET},
+	{BXT_TRIGIN_0_PIN, BXT_TRIGIN_0_OFFSET},
+	{BXT_SEC_TCK_PIN, BXT_SEC_TCK_OFFSET},
+	{BXT_SEC_TDI_PIN, BXT_SEC_TDI_OFFSET},
+	{BXT_SEC_TMS_PIN, BXT_SEC_TMS_OFFSET},
+	{BXT_SEC_TDO_PIN, BXT_SEC_TDO_OFFSET},
+	{BXT_PWM0_PIN, BXT_PWM0_OFFSET},
+	{BXT_PWM1_PIN, BXT_PWM1_OFFSET},
+	{BXT_PWM2_PIN, BXT_PWM2_OFFSET},
+	{BXT_PWM3_PIN, BXT_PWM3_OFFSET},
+	{BXT_LPSS_UART0_RXD_PIN, BXT_LPSS_UART0_RXD_OFFSET},
+	{BXT_LPSS_UART0_TXD_PIN, BXT_LPSS_UART0_TXD_OFFSET},
+	{BXT_LPSS_UART0_RTS_B_PIN, BXT_LPSS_UART0_RTS_B_OFFSET},
+	{BXT_LPSS_UART0_CTS_B_PIN, BXT_LPSS_UART0_CTS_B_OFFSET},
+	{BXT_LPSS_UART1_RXD_PIN, BXT_LPSS_UART1_RXD_OFFSET},
+	{BXT_LPSS_UART1_TXD_PIN, BXT_LPSS_UART1_TXD_OFFSET},
+	{BXT_LPSS_UART1_RTS_B_PIN, BXT_LPSS_UART1_RTS_B_OFFSET},
+	{BXT_LPSS_UART1_CTS_B_PIN, BXT_LPSS_UART1_CTS_B_OFFSET},
+	{BXT_LPSS_UART2_RXD_PIN, BXT_LPSS_UART2_RXD_OFFSET},
+	{BXT_LPSS_UART2_TXD_PIN, BXT_LPSS_UART2_TXD_OFFSET},
+	{BXT_LPSS_UART2_RTS_B_PIN, BXT_LPSS_UART2_RTS_B_OFFSET},
+	{BXT_LPSS_UART2_CTS_B_PIN, BXT_LPSS_UART2_CTS_B_OFFSET},
+	{BXT_ISH_UART0_RXD_PIN, BXT_ISH_UART0_RXD_OFFSET},
+	{BXT_ISH_UART0_TXD_PIN, BXT_ISH_UART0_TXD_OFFSET},
+	{BXT_ISH_UART0_RTS_B_PIN, BXT_ISH_UART0_RTS_B_OFFSET},
+	{BXT_ISH_UART0_CTS_B_PIN, BXT_ISH_UART0_CTS_B_OFFSET},
+	{BXT_ISH_UART1_RXD_PIN, BXT_ISH_UART1_RXD_OFFSET},
+	{BXT_ISH_UART1_TXD_PIN, BXT_ISH_UART1_TXD_OFFSET},
+	{BXT_ISH_UART1_RTS_B_PIN, BXT_ISH_UART1_RTS_B_OFFSET},
+	{BXT_ISH_UART1_CTS_B_PIN, BXT_ISH_UART1_CTS_B_OFFSET},
+	{BXT_ISH_UART2_RXD_PIN, BXT_ISH_UART2_RXD_OFFSET},
+	{BXT_ISH_UART2_TXD_PIN, BXT_ISH_UART2_TXD_OFFSET},
+	{BXT_ISH_UART2_RTS_B_PIN, BXT_ISH_UART2_RTS_B_OFFSET},
+	{BXT_ISH_UART2_CTS_B_PIN, BXT_ISH_UART2_CTS_B_OFFSET},
+	{BXT_GP_CAMERASB00_PIN, BXT_GP_CAMERASB00_OFFSET},
+	{BXT_GP_CAMERASB01_PIN, BXT_GP_CAMERASB01_OFFSET},
+	{BXT_GP_CAMERASB02_PIN, BXT_GP_CAMERASB02_OFFSET},
+	{BXT_GP_CAMERASB03_PIN, BXT_GP_CAMERASB03_OFFSET},
+	{BXT_GP_CAMERASB04_PIN, BXT_GP_CAMERASB04_OFFSET},
+	{BXT_GP_CAMERASB05_PIN, BXT_GP_CAMERASB05_OFFSET},
+	{BXT_GP_CAMERASB06_PIN, BXT_GP_CAMERASB06_OFFSET},
+	{BXT_GP_CAMERASB07_PIN, BXT_GP_CAMERASB07_OFFSET},
+	{BXT_GP_CAMERASB08_PIN, BXT_GP_CAMERASB08_OFFSET},
+	{BXT_GP_CAMERASB09_PIN, BXT_GP_CAMERASB09_OFFSET},
+	{BXT_GP_CAMERASB10_PIN, BXT_GP_CAMERASB10_OFFSET},
+	{BXT_GP_CAMERASB11_PIN, BXT_GP_CAMERASB11_OFFSET},
+};
+
 static inline enum port intel_dsi_seq_port_to_port(u8 port)
 {
 	return port ? PORT_C : PORT_A;
@@ -796,6 +1426,52 @@ void chv_program_gpio(struct intel_dsi *intel_dsi, u8 gpio, u8 action)
 
 }
 
+void bxt_program_gpio(struct intel_dsi *intel_dsi, u8 gpio, u8 value)
+{
+	u16 gpio_number = 0, i;
+	int err;
+
+	for (i = 0; i < ARRAY_SIZE(bxt_gtable); i++) {
+		if (bxt_gtable[i].gpio_pin == gpio)
+			gpio_number = bxt_gtable[i].offset;
+
+			if (!gpio_number) {
+				DRM_ERROR("Invalid GPIO requested\n");
+				return;
+			}
+			if (!bxt_gtable[i].pin_requested) {
+				err = gpio_request_one(gpio_number,
+						GPIOF_DIR_OUT, "MIPI");
+				if (err) {
+					DRM_ERROR("unable to get GPIO %d\n",
+							gpio_number);
+					return;
+				}
+				bxt_gtable[i].pin_requested = true;
+			}
+	}
+
+	if (!gpio_number) {
+		DRM_ERROR("Requested GPIO not found in the table\n");
+		return;
+	}
+
+	gpio_set_value(gpio_number, value);
+}
+
+void bxt_free_gpio(struct intel_dsi *intel_dsi)
+{
+	int i;
+	u16 gpio_number;
+
+	for (i = 0; i < ARRAY_SIZE(bxt_gtable); i++) {
+		if (bxt_gtable[i].pin_requested) {
+			gpio_number = bxt_gtable[i].offset;
+			gpio_free(gpio_number);
+		}
+	}
+}
+
 static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
 {
 	u8 gpio, action;
@@ -821,6 +1497,8 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
 		vlv_program_gpio(intel_dsi, gpio, action);
 	else if (IS_CHERRYVIEW(dev))
 		chv_program_gpio(intel_dsi, gpio, action);
+	else if (IS_BROXTON(dev))
+		bxt_program_gpio(intel_dsi, gpio, action);
 	else
 		DRM_ERROR("GPIO programming missing for this platform.\n");
 
@@ -991,6 +1669,14 @@ static const struct drm_panel_funcs vbt_panel_funcs = {
 	.get_modes = vbt_panel_get_modes,
 };
 
+void vbt_panel_exit(struct intel_dsi *intel_dsi)
+{
+	struct drm_device *dev = intel_dsi->base.base.dev;
+
+	if (IS_BROXTON(dev))
+		bxt_free_gpio(intel_dsi);
+}
+
 struct drm_panel *vbt_panel_init(struct intel_dsi *intel_dsi, u16 panel_id)
 {
 	struct drm_device *dev = intel_dsi->base.base.dev;
-- 
1.9.1



More information about the Intel-gfx mailing list