* [PATCH v3 0/6] drm/i915/dsi: improved gpio element support for vlv/chv/bxt
@ 2016-04-05 19:30 Jani Nikula
2016-04-05 19:30 ` [PATCH v3 1/6] drm/i915/dsi: clean up vlv gpio table and definitions Jani Nikula
` (6 more replies)
0 siblings, 7 replies; 19+ messages in thread
From: Jani Nikula @ 2016-04-05 19:30 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Next iteration after [1]. Last patch merely rebased, and review comments
not addressed, but included here for completeness.
BR,
Jani.
[1] http://mid.gmane.org/cover.1458299160.git.jani.nikula@intel.com
Jani Nikula (6):
drm/i915/dsi: clean up vlv gpio table and definitions
drm/i915/dsi: abstract VLV gpio element execution to a separate
function
drm/i915/dsi: use a temp variable for referencing the gpio table
drm/i915/dsi: add support for sequence block v3 gpio for VLV
drm/i915/dsi: add support for gpio elements on CHV
drm/i915/bxt: add bxt dsi gpio element support
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 886 ++++++++++++++++++++++++++---
1 file changed, 807 insertions(+), 79 deletions(-)
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v3 1/6] drm/i915/dsi: clean up vlv gpio table and definitions
2016-04-05 19:30 [PATCH v3 0/6] drm/i915/dsi: improved gpio element support for vlv/chv/bxt Jani Nikula
@ 2016-04-05 19:30 ` Jani Nikula
2016-04-07 12:59 ` Ville Syrjälä
2016-04-05 19:30 ` [PATCH v3 2/6] drm/i915/dsi: abstract VLV gpio element execution to a separate function Jani Nikula
` (5 subsequent siblings)
6 siblings, 1 reply; 19+ messages in thread
From: Jani Nikula @ 2016-04-05 19:30 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Define and store the pad base offset in the array, and reference the
pconf0 and padval registers through macros. Add VLV prefixes to
macros. Use spec nomenclature for pconf0 and padval.
v2: Address Ville's review comments, squash another patch here.
v3: Use the names Ville dug up in the specs.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 87 ++++++++++++++----------------
1 file changed, 39 insertions(+), 48 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index af1a47b5224f..21964ba0bf34 100644
--- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
@@ -58,50 +58,41 @@ static inline struct vbt_panel *to_vbt_panel(struct drm_panel *panel)
#define NS_KHZ_RATIO 1000000
-#define GPI0_NC_0_HV_DDI0_HPD 0x4130
-#define GPIO_NC_0_HV_DDI0_PAD 0x4138
-#define GPIO_NC_1_HV_DDI0_DDC_SDA 0x4120
-#define GPIO_NC_1_HV_DDI0_DDC_SDA_PAD 0x4128
-#define GPIO_NC_2_HV_DDI0_DDC_SCL 0x4110
-#define GPIO_NC_2_HV_DDI0_DDC_SCL_PAD 0x4118
-#define GPIO_NC_3_PANEL0_VDDEN 0x4140
-#define GPIO_NC_3_PANEL0_VDDEN_PAD 0x4148
-#define GPIO_NC_4_PANEL0_BLKEN 0x4150
-#define GPIO_NC_4_PANEL0_BLKEN_PAD 0x4158
-#define GPIO_NC_5_PANEL0_BLKCTL 0x4160
-#define GPIO_NC_5_PANEL0_BLKCTL_PAD 0x4168
-#define GPIO_NC_6_PCONF0 0x4180
-#define GPIO_NC_6_PAD 0x4188
-#define GPIO_NC_7_PCONF0 0x4190
-#define GPIO_NC_7_PAD 0x4198
-#define GPIO_NC_8_PCONF0 0x4170
-#define GPIO_NC_8_PAD 0x4178
-#define GPIO_NC_9_PCONF0 0x4100
-#define GPIO_NC_9_PAD 0x4108
-#define GPIO_NC_10_PCONF0 0x40E0
-#define GPIO_NC_10_PAD 0x40E8
-#define GPIO_NC_11_PCONF0 0x40F0
-#define GPIO_NC_11_PAD 0x40F8
+/* base offsets for gpio pads */
+#define VLV_GPIO_NC_0_HV_DDI0_HPD 0x4130
+#define VLV_GPIO_NC_1_HV_DDI0_DDC_SDA 0x4120
+#define VLV_GPIO_NC_2_HV_DDI0_DDC_SCL 0x4110
+#define VLV_GPIO_NC_3_PANEL0_VDDEN 0x4140
+#define VLV_GPIO_NC_4_PANEL0_BKLTEN 0x4150
+#define VLV_GPIO_NC_5_PANEL0_BKLTCTL 0x4160
+#define VLV_GPIO_NC_6_HV_DDI1_HPD 0x4180
+#define VLV_GPIO_NC_7_HV_DDI1_DDC_SDA 0x4190
+#define VLV_GPIO_NC_8_HV_DDI1_DDC_SCL 0x4170
+#define VLV_GPIO_NC_9_PANEL1_VDDEN 0x4100
+#define VLV_GPIO_NC_10_PANEL1_BKLTEN 0x40E0
+#define VLV_GPIO_NC_11_PANEL1_BKLTCTL 0x40F0
+
+#define VLV_GPIO_PCONF0(base_offset) (base_offset)
+#define VLV_GPIO_PAD_VAL(base_offset) ((base_offset) + 8)
struct gpio_table {
- u16 function_reg;
- u16 pad_reg;
- u8 init;
+ u16 base_offset;
+ bool init;
};
-static struct gpio_table gtable[] = {
- { GPI0_NC_0_HV_DDI0_HPD, GPIO_NC_0_HV_DDI0_PAD, 0 },
- { GPIO_NC_1_HV_DDI0_DDC_SDA, GPIO_NC_1_HV_DDI0_DDC_SDA_PAD, 0 },
- { GPIO_NC_2_HV_DDI0_DDC_SCL, GPIO_NC_2_HV_DDI0_DDC_SCL_PAD, 0 },
- { GPIO_NC_3_PANEL0_VDDEN, GPIO_NC_3_PANEL0_VDDEN_PAD, 0 },
- { GPIO_NC_4_PANEL0_BLKEN, GPIO_NC_4_PANEL0_BLKEN_PAD, 0 },
- { GPIO_NC_5_PANEL0_BLKCTL, GPIO_NC_5_PANEL0_BLKCTL_PAD, 0 },
- { GPIO_NC_6_PCONF0, GPIO_NC_6_PAD, 0 },
- { GPIO_NC_7_PCONF0, GPIO_NC_7_PAD, 0 },
- { GPIO_NC_8_PCONF0, GPIO_NC_8_PAD, 0 },
- { GPIO_NC_9_PCONF0, GPIO_NC_9_PAD, 0 },
- { GPIO_NC_10_PCONF0, GPIO_NC_10_PAD, 0},
- { GPIO_NC_11_PCONF0, GPIO_NC_11_PAD, 0}
+static struct gpio_table vlv_gpio_table[] = {
+ { VLV_GPIO_NC_0_HV_DDI0_HPD },
+ { VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
+ { VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
+ { VLV_GPIO_NC_3_PANEL0_VDDEN },
+ { VLV_GPIO_NC_4_PANEL0_BKLTEN },
+ { VLV_GPIO_NC_5_PANEL0_BKLTCTL },
+ { VLV_GPIO_NC_6_HV_DDI1_HPD },
+ { VLV_GPIO_NC_7_HV_DDI1_DDC_SDA },
+ { VLV_GPIO_NC_8_HV_DDI1_DDC_SCL },
+ { VLV_GPIO_NC_9_PANEL1_VDDEN },
+ { VLV_GPIO_NC_10_PANEL1_BKLTEN },
+ { VLV_GPIO_NC_11_PANEL1_BKLTCTL },
};
static inline enum port intel_dsi_seq_port_to_port(u8 port)
@@ -199,7 +190,7 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
{
u8 gpio_source, gpio_index, action, port;
- u16 function, pad;
+ u16 pconf0, padval;
u32 val;
struct drm_device *dev = intel_dsi->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -218,7 +209,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
/* pull up/down */
action = *data++ & 1;
- if (gpio_index >= ARRAY_SIZE(gtable)) {
+ if (gpio_index >= ARRAY_SIZE(vlv_gpio_table)) {
DRM_DEBUG_KMS("unknown gpio index %u\n", gpio_index);
goto out;
}
@@ -242,21 +233,21 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
}
}
- function = gtable[gpio_index].function_reg;
- pad = gtable[gpio_index].pad_reg;
+ pconf0 = VLV_GPIO_PCONF0(vlv_gpio_table[gpio_index].base_offset);
+ padval = VLV_GPIO_PAD_VAL(vlv_gpio_table[gpio_index].base_offset);
mutex_lock(&dev_priv->sb_lock);
- if (!gtable[gpio_index].init) {
+ if (!vlv_gpio_table[gpio_index].init) {
/* program the function */
/* FIXME: remove constant below */
- vlv_iosf_sb_write(dev_priv, port, function, 0x2000CC00);
- gtable[gpio_index].init = 1;
+ vlv_iosf_sb_write(dev_priv, port, pconf0, 0x2000CC00);
+ vlv_gpio_table[gpio_index].init = true;
}
val = 0x4 | action;
/* pull up/down */
- vlv_iosf_sb_write(dev_priv, port, pad, val);
+ vlv_iosf_sb_write(dev_priv, port, padval, val);
mutex_unlock(&dev_priv->sb_lock);
out:
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 2/6] drm/i915/dsi: abstract VLV gpio element execution to a separate function
2016-04-05 19:30 [PATCH v3 0/6] drm/i915/dsi: improved gpio element support for vlv/chv/bxt Jani Nikula
2016-04-05 19:30 ` [PATCH v3 1/6] drm/i915/dsi: clean up vlv gpio table and definitions Jani Nikula
@ 2016-04-05 19:30 ` Jani Nikula
2016-04-07 13:00 ` Ville Syrjälä
2016-04-05 19:30 ` [PATCH v3 3/6] drm/i915/dsi: use a temp variable for referencing the gpio table Jani Nikula
` (4 subsequent siblings)
6 siblings, 1 reply; 19+ messages in thread
From: Jani Nikula @ 2016-04-05 19:30 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Prepare for future. No functional changes.
v2: Move earlier in the series. Use bool for gpio value.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 68 +++++++++++++++---------------
1 file changed, 35 insertions(+), 33 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index 21964ba0bf34..6c2774ceb69f 100644
--- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
@@ -187,41 +187,21 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
return data;
}
-static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
+static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
+ u8 gpio_source, u8 gpio_index, bool value)
{
- u8 gpio_source, gpio_index, action, port;
u16 pconf0, padval;
- u32 val;
- struct drm_device *dev = intel_dsi->base.base.dev;
- struct drm_i915_private *dev_priv = dev->dev_private;
-
- if (dev_priv->vbt.dsi.seq_version >= 3)
- data++;
-
- gpio_index = *data++;
-
- /* gpio source in sequence v2 only */
- if (dev_priv->vbt.dsi.seq_version == 2)
- gpio_source = (*data >> 1) & 3;
- else
- gpio_source = 0;
-
- /* pull up/down */
- action = *data++ & 1;
+ u32 tmp;
+ u8 port;
if (gpio_index >= ARRAY_SIZE(vlv_gpio_table)) {
DRM_DEBUG_KMS("unknown gpio index %u\n", gpio_index);
- goto out;
- }
-
- if (!IS_VALLEYVIEW(dev_priv)) {
- DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
- goto out;
+ return;
}
if (dev_priv->vbt.dsi.seq_version >= 3) {
DRM_DEBUG_KMS("GPIO element v3 not supported\n");
- goto out;
+ return;
} else {
if (gpio_source == 0) {
port = IOSF_PORT_GPIO_NC;
@@ -229,7 +209,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
port = IOSF_PORT_GPIO_SC;
} else {
DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source);
- goto out;
+ return;
}
}
@@ -238,19 +218,41 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
mutex_lock(&dev_priv->sb_lock);
if (!vlv_gpio_table[gpio_index].init) {
- /* program the function */
- /* FIXME: remove constant below */
vlv_iosf_sb_write(dev_priv, port, pconf0, 0x2000CC00);
vlv_gpio_table[gpio_index].init = true;
}
- val = 0x4 | action;
+ tmp = 0x4 | value;
+ vlv_iosf_sb_write(dev_priv, port, padval, tmp);
+ mutex_unlock(&dev_priv->sb_lock);
+}
+
+static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
+{
+ struct drm_device *dev = intel_dsi->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u8 gpio_source, gpio_index;
+ bool value;
+
+ if (dev_priv->vbt.dsi.seq_version >= 3)
+ data++;
+
+ gpio_index = *data++;
+
+ /* gpio source in sequence v2 only */
+ if (dev_priv->vbt.dsi.seq_version == 2)
+ gpio_source = (*data >> 1) & 3;
+ else
+ gpio_source = 0;
/* pull up/down */
- vlv_iosf_sb_write(dev_priv, port, padval, val);
- mutex_unlock(&dev_priv->sb_lock);
+ value = *data++ & 1;
+
+ if (IS_VALLEYVIEW(dev_priv))
+ vlv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
+ else
+ DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
-out:
return data;
}
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 3/6] drm/i915/dsi: use a temp variable for referencing the gpio table
2016-04-05 19:30 [PATCH v3 0/6] drm/i915/dsi: improved gpio element support for vlv/chv/bxt Jani Nikula
2016-04-05 19:30 ` [PATCH v3 1/6] drm/i915/dsi: clean up vlv gpio table and definitions Jani Nikula
2016-04-05 19:30 ` [PATCH v3 2/6] drm/i915/dsi: abstract VLV gpio element execution to a separate function Jani Nikula
@ 2016-04-05 19:30 ` Jani Nikula
2016-04-07 13:01 ` Ville Syrjälä
2016-04-05 19:30 ` [PATCH v3 4/6] drm/i915/dsi: add support for sequence block v3 gpio for VLV Jani Nikula
` (3 subsequent siblings)
6 siblings, 1 reply; 19+ messages in thread
From: Jani Nikula @ 2016-04-05 19:30 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
The shorthand is easier. Also change the struct name. No functional
changes.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index 6c2774ceb69f..ff0731420677 100644
--- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
@@ -75,12 +75,12 @@ static inline struct vbt_panel *to_vbt_panel(struct drm_panel *panel)
#define VLV_GPIO_PCONF0(base_offset) (base_offset)
#define VLV_GPIO_PAD_VAL(base_offset) ((base_offset) + 8)
-struct gpio_table {
+struct gpio_map {
u16 base_offset;
bool init;
};
-static struct gpio_table vlv_gpio_table[] = {
+static struct gpio_map vlv_gpio_table[] = {
{ VLV_GPIO_NC_0_HV_DDI0_HPD },
{ VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
{ VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
@@ -190,6 +190,7 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
u8 gpio_source, u8 gpio_index, bool value)
{
+ struct gpio_map *map;
u16 pconf0, padval;
u32 tmp;
u8 port;
@@ -199,6 +200,8 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
return;
}
+ map = &vlv_gpio_table[gpio_index];
+
if (dev_priv->vbt.dsi.seq_version >= 3) {
DRM_DEBUG_KMS("GPIO element v3 not supported\n");
return;
@@ -213,13 +216,13 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
}
}
- pconf0 = VLV_GPIO_PCONF0(vlv_gpio_table[gpio_index].base_offset);
- padval = VLV_GPIO_PAD_VAL(vlv_gpio_table[gpio_index].base_offset);
+ pconf0 = VLV_GPIO_PCONF0(map->base_offset);
+ padval = VLV_GPIO_PAD_VAL(map->base_offset);
mutex_lock(&dev_priv->sb_lock);
- if (!vlv_gpio_table[gpio_index].init) {
+ if (!map->init) {
vlv_iosf_sb_write(dev_priv, port, pconf0, 0x2000CC00);
- vlv_gpio_table[gpio_index].init = true;
+ map->init = true;
}
tmp = 0x4 | value;
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 4/6] drm/i915/dsi: add support for sequence block v3 gpio for VLV
2016-04-05 19:30 [PATCH v3 0/6] drm/i915/dsi: improved gpio element support for vlv/chv/bxt Jani Nikula
` (2 preceding siblings ...)
2016-04-05 19:30 ` [PATCH v3 3/6] drm/i915/dsi: use a temp variable for referencing the gpio table Jani Nikula
@ 2016-04-05 19:30 ` Jani Nikula
2016-04-07 13:04 ` Ville Syrjälä
2016-04-05 19:30 ` [PATCH v3 5/6] drm/i915/dsi: add support for gpio elements on CHV Jani Nikula
` (2 subsequent siblings)
6 siblings, 1 reply; 19+ messages in thread
From: Jani Nikula @ 2016-04-05 19:30 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Just put the iosf port in the gpio table. The table might include some
duplication, but this approach keeps the code the cleanest.
v2: pack the struct better (Ville), use designated initializers, add
debug logging for mismatching ports
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 31 ++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index ff0731420677..98583f37f5c7 100644
--- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
@@ -77,22 +77,23 @@ static inline struct vbt_panel *to_vbt_panel(struct drm_panel *panel)
struct gpio_map {
u16 base_offset;
+ u8 port;
bool init;
};
static struct gpio_map vlv_gpio_table[] = {
- { VLV_GPIO_NC_0_HV_DDI0_HPD },
- { VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
- { VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
- { VLV_GPIO_NC_3_PANEL0_VDDEN },
- { VLV_GPIO_NC_4_PANEL0_BKLTEN },
- { VLV_GPIO_NC_5_PANEL0_BKLTCTL },
- { VLV_GPIO_NC_6_HV_DDI1_HPD },
- { VLV_GPIO_NC_7_HV_DDI1_DDC_SDA },
- { VLV_GPIO_NC_8_HV_DDI1_DDC_SCL },
- { VLV_GPIO_NC_9_PANEL1_VDDEN },
- { VLV_GPIO_NC_10_PANEL1_BKLTEN },
- { VLV_GPIO_NC_11_PANEL1_BKLTCTL },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_0_HV_DDI0_HPD },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_3_PANEL0_VDDEN },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_4_PANEL0_BKLTEN },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_5_PANEL0_BKLTCTL },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_6_HV_DDI1_HPD },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_7_HV_DDI1_DDC_SDA },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_8_HV_DDI1_DDC_SCL },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_9_PANEL1_VDDEN },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_10_PANEL1_BKLTEN },
+ { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_11_PANEL1_BKLTCTL },
};
static inline enum port intel_dsi_seq_port_to_port(u8 port)
@@ -203,8 +204,7 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
map = &vlv_gpio_table[gpio_index];
if (dev_priv->vbt.dsi.seq_version >= 3) {
- DRM_DEBUG_KMS("GPIO element v3 not supported\n");
- return;
+ port = map->port;
} else {
if (gpio_source == 0) {
port = IOSF_PORT_GPIO_NC;
@@ -214,6 +214,9 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source);
return;
}
+
+ if (port != map->port)
+ DRM_DEBUG_KMS("suspect gpio source %u\n", gpio_source);
}
pconf0 = VLV_GPIO_PCONF0(map->base_offset);
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 5/6] drm/i915/dsi: add support for gpio elements on CHV
2016-04-05 19:30 [PATCH v3 0/6] drm/i915/dsi: improved gpio element support for vlv/chv/bxt Jani Nikula
` (3 preceding siblings ...)
2016-04-05 19:30 ` [PATCH v3 4/6] drm/i915/dsi: add support for sequence block v3 gpio for VLV Jani Nikula
@ 2016-04-05 19:30 ` Jani Nikula
2016-04-07 13:16 ` Ville Syrjälä
2016-04-05 19:30 ` [PATCH v3 6/6] drm/i915/bxt: add bxt dsi gpio element support Jani Nikula
2016-04-06 7:27 ` ✗ Fi.CI.BAT: failure for drm/i915/dsi: improved gpio element support for vlv/chv/bxt (rev2) Patchwork
6 siblings, 1 reply; 19+ messages in thread
From: Jani Nikula @ 2016-04-05 19:30 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Add support for CHV gpio programming in DSI gpio elements.
v2: Overhaul macros according to Ville's review.
[Rewritten by Jani, based on earlier work by Yogesh and Deepak.]
Signed-off-by: Yogesh Mohan Marimuthu <yogesh.mohan.marimuthu@intel.com>
Signed-off-by: Deepak M <m.deepak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 64 ++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index 98583f37f5c7..5e2c31d9a748 100644
--- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
@@ -96,6 +96,24 @@ static struct gpio_map vlv_gpio_table[] = {
{ .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_11_PANEL1_BKLTCTL },
};
+#define CHV_GPIO_IDX_START_N 0
+#define CHV_GPIO_IDX_START_SE 73
+#define CHV_GPIO_IDX_START_SW 100
+#define CHV_GPIO_IDX_START_E 198
+
+#define CHV_VBT_MAX_PINS_PER_FMLY 15
+
+#define CHV_GPIO_PAD_CFG0(f, i) (0x4400 + (f) * 0x400 + (i) * 8)
+#define CHV_GPIO_PAD_CFG1(f, i) (0x4400 + (f) * 0x400 + (i) * 8 + 4)
+
+#define CHV_GPIO_CFGLOCK (1 << 31)
+#define CHV_GPIO_GPIOEN (1 << 15)
+#define CHV_GPIO_GPIOCFG_GPIO (0 << 8)
+#define CHV_GPIO_GPIOCFG_GPO (1 << 8)
+#define CHV_GPIO_GPIOCFG_GPI (2 << 8)
+#define CHV_GPIO_GPIOCFG_HIZ (3 << 8)
+#define CHV_GPIO_GPIOTXSTATE(state) ((!!(state)) << 1)
+
static inline enum port intel_dsi_seq_port_to_port(u8 port)
{
return port ? PORT_C : PORT_A;
@@ -233,6 +251,50 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
mutex_unlock(&dev_priv->sb_lock);
}
+static void chv_exec_gpio(struct drm_i915_private *dev_priv,
+ u8 gpio_source, u8 gpio_index, bool value)
+{
+ u16 cfg0, cfg1;
+ u16 family_num;
+ u8 port;
+
+ if (dev_priv->vbt.dsi.seq_version >= 3) {
+ if (gpio_index >= CHV_GPIO_IDX_START_E) {
+ gpio_index -= CHV_GPIO_IDX_START_E;
+ port = CHV_IOSF_PORT_GPIO_E;
+ } else if (gpio_index >= CHV_GPIO_IDX_START_SW) {
+ gpio_index -= CHV_GPIO_IDX_START_SW;
+ port = CHV_IOSF_PORT_GPIO_SW;
+ } else if (gpio_index >= CHV_GPIO_IDX_START_SE) {
+ gpio_index -= CHV_GPIO_IDX_START_SE;
+ port = CHV_IOSF_PORT_GPIO_SE;
+ } else {
+ port = CHV_IOSF_PORT_GPIO_N;
+ }
+ } else {
+ if (gpio_source == 0) {
+ port = IOSF_PORT_GPIO_NC;
+ } else if (gpio_source == 1) {
+ port = IOSF_PORT_GPIO_SC;
+ } else {
+ DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source);
+ return;
+ }
+ }
+
+ family_num = gpio_index / CHV_VBT_MAX_PINS_PER_FMLY;
+ gpio_index = gpio_index % CHV_VBT_MAX_PINS_PER_FMLY;
+
+ cfg0 = CHV_GPIO_PAD_CFG0(family_num, gpio_index);
+ cfg1 = CHV_GPIO_PAD_CFG1(family_num, gpio_index);
+
+ mutex_lock(&dev_priv->sb_lock);
+ vlv_iosf_sb_write(dev_priv, port, cfg0, 0);
+ vlv_iosf_sb_write(dev_priv, port, cfg1,
+ CHV_GPIO_GPIOCFG_HIZ | CHV_GPIO_GPIOTXSTATE(value));
+ mutex_unlock(&dev_priv->sb_lock);
+}
+
static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
{
struct drm_device *dev = intel_dsi->base.base.dev;
@@ -256,6 +318,8 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
if (IS_VALLEYVIEW(dev_priv))
vlv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
+ else if (IS_CHERRYVIEW(dev_priv))
+ chv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
else
DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 6/6] drm/i915/bxt: add bxt dsi gpio element support
2016-04-05 19:30 [PATCH v3 0/6] drm/i915/dsi: improved gpio element support for vlv/chv/bxt Jani Nikula
` (4 preceding siblings ...)
2016-04-05 19:30 ` [PATCH v3 5/6] drm/i915/dsi: add support for gpio elements on CHV Jani Nikula
@ 2016-04-05 19:30 ` Jani Nikula
2016-04-07 11:47 ` [PATCH] " Jani Nikula
2016-04-06 7:27 ` ✗ Fi.CI.BAT: failure for drm/i915/dsi: improved gpio element support for vlv/chv/bxt (rev2) Patchwork
6 siblings, 1 reply; 19+ messages in thread
From: Jani Nikula @ 2016-04-05 19:30 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Use a table similar to vlv to check for accepted gpio indexes. For now,
add all, but this list should be trimmed down. Use managed gpio request,
which will be automatically released when the driver is detached.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
I didn't address review comments to this one yet, but I'm including the
rebased patch for completeness.
---
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 667 ++++++++++++++++++++++++++++-
1 file changed, 666 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index 5e2c31d9a748..d76592eb6f5b 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>
@@ -114,6 +115,636 @@ static struct gpio_map vlv_gpio_table[] = {
#define CHV_GPIO_GPIOCFG_HIZ (3 << 8)
#define CHV_GPIO_GPIOTXSTATE(state) ((!!(state)) << 1)
+#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
+
+struct bxt_gpio_map {
+ u8 gpio_index;
+ u16 gpio_number;
+ bool requested;
+};
+
+/* XXX: take out everything that is not related to DSI display */
+static struct bxt_gpio_map bxt_gpio_table[] = {
+ { 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;
@@ -295,6 +926,40 @@ static void chv_exec_gpio(struct drm_i915_private *dev_priv,
mutex_unlock(&dev_priv->sb_lock);
}
+static void bxt_exec_gpio(struct drm_i915_private *dev_priv,
+ u8 gpio_source, u8 gpio_index, bool value)
+{
+ struct bxt_gpio_map *map = NULL;
+ unsigned int gpio;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(bxt_gpio_table); i++) {
+ if (gpio_index == bxt_gpio_table[i].gpio_index) {
+ map = &bxt_gpio_table[i];
+ break;
+ }
+ }
+
+ if (!map) {
+ DRM_DEBUG_KMS("invalid gpio index %u\n", gpio_index);
+ return;
+ }
+
+ gpio = map->gpio_number;
+
+ if (!map->requested) {
+ int ret = devm_gpio_request_one(dev_priv->dev->dev, gpio,
+ GPIOF_DIR_OUT, "MIPI DSI");
+ if (ret) {
+ DRM_ERROR("unable to request GPIO %u (%d)\n", gpio, ret);
+ return;
+ }
+ map->requested = true;
+ }
+
+ gpio_set_value(gpio, value);
+}
+
static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
{
struct drm_device *dev = intel_dsi->base.base.dev;
@@ -321,7 +986,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
else if (IS_CHERRYVIEW(dev_priv))
chv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
else
- DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
+ bxt_exec_gpio(dev_priv, gpio_source, gpio_index, value);
return data;
}
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* ✗ Fi.CI.BAT: failure for drm/i915/dsi: improved gpio element support for vlv/chv/bxt (rev2)
2016-04-05 19:30 [PATCH v3 0/6] drm/i915/dsi: improved gpio element support for vlv/chv/bxt Jani Nikula
` (5 preceding siblings ...)
2016-04-05 19:30 ` [PATCH v3 6/6] drm/i915/bxt: add bxt dsi gpio element support Jani Nikula
@ 2016-04-06 7:27 ` Patchwork
6 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2016-04-06 7:27 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/dsi: improved gpio element support for vlv/chv/bxt (rev2)
URL : https://patchwork.freedesktop.org/series/4625/
State : failure
== Summary ==
Series 4625v2 drm/i915/dsi: improved gpio element support for vlv/chv/bxt
http://patchwork.freedesktop.org/api/1.0/series/4625/revisions/2/mbox/
Test gem_exec_whisper:
Subgroup basic:
pass -> DMESG-FAIL (bsw-nuc-2)
Test gem_sync:
Subgroup basic-all:
dmesg-fail -> PASS (bsw-nuc-2)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
pass -> DMESG-WARN (bsw-nuc-2)
dmesg-warn -> PASS (ilk-hp8440p) UNSTABLE
Test kms_force_connector_basic:
Subgroup prune-stale-modes:
skip -> PASS (ivb-t430s)
Test kms_pipe_crc_basic:
Subgroup suspend-read-crc-pipe-c:
dmesg-warn -> PASS (bsw-nuc-2)
Test pm_rpm:
Subgroup basic-pci-d3-state:
pass -> DMESG-WARN (bsw-nuc-2)
Subgroup basic-rte:
pass -> DMESG-WARN (bsw-nuc-2)
bdw-nuci7 total:196 pass:184 dwarn:0 dfail:0 fail:0 skip:12
bdw-ultra total:196 pass:175 dwarn:0 dfail:0 fail:0 skip:21
bsw-nuc-2 total:196 pass:155 dwarn:3 dfail:1 fail:0 skip:37
byt-nuc total:196 pass:161 dwarn:0 dfail:0 fail:0 skip:35
hsw-brixbox total:196 pass:174 dwarn:0 dfail:0 fail:0 skip:22
hsw-gt2 total:196 pass:179 dwarn:0 dfail:0 fail:0 skip:17
ilk-hp8440p total:196 pass:132 dwarn:0 dfail:0 fail:0 skip:64
ivb-t430s total:196 pass:171 dwarn:0 dfail:0 fail:0 skip:25
skl-i7k-2 total:196 pass:173 dwarn:0 dfail:0 fail:0 skip:23
skl-nuci5 total:196 pass:185 dwarn:0 dfail:0 fail:0 skip:11
snb-dellxps total:196 pass:162 dwarn:0 dfail:0 fail:0 skip:34
snb-x220t total:196 pass:162 dwarn:0 dfail:0 fail:1 skip:33
Results at /archive/results/CI_IGT_test/Patchwork_1809/
12899f13b8ee9a4944f167a08e4db0526a3f3855 drm-intel-nightly: 2016y-04m-05d-19h-09m-25s UTC integration manifest
000b41e33a0f329c23cb7543e5a8b93301f0b8fd drm/i915/bxt: add bxt dsi gpio element support
ab02443f11a74ea5f61f0a98915324d71d86c013 drm/i915/dsi: add support for gpio elements on CHV
80894abb0bcd98551d93a7e747f0b025329c1103 drm/i915/dsi: add support for sequence block v3 gpio for VLV
cbff872b8dc0f99bd05763ed3b7f3693f4f0470d drm/i915/dsi: use a temp variable for referencing the gpio table
637fef0ccf65d7fb3a70b9c46e8044e868e275b6 drm/i915/dsi: abstract VLV gpio element execution to a separate function
5c33abcd97bd2185e1b9e3f49411fdda93562456 drm/i915/dsi: clean up vlv gpio table and definitions
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH] drm/i915/bxt: add bxt dsi gpio element support
2016-04-05 19:30 ` [PATCH v3 6/6] drm/i915/bxt: add bxt dsi gpio element support Jani Nikula
@ 2016-04-07 11:47 ` Jani Nikula
2016-04-07 12:21 ` Ville Syrjälä
0 siblings, 1 reply; 19+ messages in thread
From: Jani Nikula @ 2016-04-07 11:47 UTC (permalink / raw)
To: Jani Nikula, intel-gfx
Request the GPIO by index through the consumer API. For now, use a quick
hack to store the already requested ones, simply because I have no idea
whether this actually works or not, and I have no way to test it.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index 5e2c31d9a748..7e6a21c05c6a 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>
@@ -295,6 +296,31 @@ static void chv_exec_gpio(struct drm_i915_private *dev_priv,
mutex_unlock(&dev_priv->sb_lock);
}
+static void bxt_exec_gpio(struct drm_i915_private *dev_priv,
+ u8 gpio_source, u8 gpio_index, bool value)
+{
+ /* XXX: this table is a quick ugly hack. */
+ static struct gpio_desc *bxt_gpio_table[U8_MAX + 1];
+ struct gpio_desc *gpio_desc = bxt_gpio_table[gpio_index];
+
+ if (!gpio_desc) {
+ gpio_desc = devm_gpiod_get_index(dev_priv->dev->dev,
+ NULL, gpio_index,
+ value ? GPIOD_OUT_LOW :
+ GPIOD_OUT_HIGH);
+
+ if (IS_ERR_OR_NULL(gpio_desc)) {
+ DRM_ERROR("GPIO index %u request failed (%ld)\n",
+ gpio_index, PTR_ERR(gpio_desc));
+ return;
+ }
+
+ bxt_gpio_table[gpio_index] = gpio_desc;
+ }
+
+ gpiod_set_value(gpio_desc, value);
+}
+
static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
{
struct drm_device *dev = intel_dsi->base.base.dev;
@@ -321,7 +347,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
else if (IS_CHERRYVIEW(dev_priv))
chv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
else
- DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
+ bxt_exec_gpio(dev_priv, gpio_source, gpio_index, value);
return data;
}
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH] drm/i915/bxt: add bxt dsi gpio element support
2016-04-07 11:47 ` [PATCH] " Jani Nikula
@ 2016-04-07 12:21 ` Ville Syrjälä
2016-04-07 12:55 ` Jani Nikula
0 siblings, 1 reply; 19+ messages in thread
From: Ville Syrjälä @ 2016-04-07 12:21 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Thu, Apr 07, 2016 at 02:47:52PM +0300, Jani Nikula wrote:
> Request the GPIO by index through the consumer API. For now, use a quick
> hack to store the already requested ones, simply because I have no idea
> whether this actually works or not, and I have no way to test it.
Would be cool if someone dumped out the relevant ACPI table(s) on
a machine that needs this stuff, so that we can see if things look
sane on that level.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 28 +++++++++++++++++++++++++++-
> 1 file changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> index 5e2c31d9a748..7e6a21c05c6a 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>
> @@ -295,6 +296,31 @@ static void chv_exec_gpio(struct drm_i915_private *dev_priv,
> mutex_unlock(&dev_priv->sb_lock);
> }
>
> +static void bxt_exec_gpio(struct drm_i915_private *dev_priv,
> + u8 gpio_source, u8 gpio_index, bool value)
> +{
> + /* XXX: this table is a quick ugly hack. */
> + static struct gpio_desc *bxt_gpio_table[U8_MAX + 1];
> + struct gpio_desc *gpio_desc = bxt_gpio_table[gpio_index];
> +
> + if (!gpio_desc) {
> + gpio_desc = devm_gpiod_get_index(dev_priv->dev->dev,
> + NULL, gpio_index,
> + value ? GPIOD_OUT_LOW :
> + GPIOD_OUT_HIGH);
> +
> + if (IS_ERR_OR_NULL(gpio_desc)) {
> + DRM_ERROR("GPIO index %u request failed (%ld)\n",
> + gpio_index, PTR_ERR(gpio_desc));
> + return;
> + }
> +
> + bxt_gpio_table[gpio_index] = gpio_desc;
> + }
> +
> + gpiod_set_value(gpio_desc, value);
> +}
> +
> static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
> {
> struct drm_device *dev = intel_dsi->base.base.dev;
> @@ -321,7 +347,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
> else if (IS_CHERRYVIEW(dev_priv))
> chv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
> else
> - DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
> + bxt_exec_gpio(dev_priv, gpio_source, gpio_index, value);
>
> return data;
> }
> --
> 2.1.4
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] drm/i915/bxt: add bxt dsi gpio element support
2016-04-07 12:21 ` Ville Syrjälä
@ 2016-04-07 12:55 ` Jani Nikula
0 siblings, 0 replies; 19+ messages in thread
From: Jani Nikula @ 2016-04-07 12:55 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx
On Thu, 07 Apr 2016, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Thu, Apr 07, 2016 at 02:47:52PM +0300, Jani Nikula wrote:
>> Request the GPIO by index through the consumer API. For now, use a quick
>> hack to store the already requested ones, simply because I have no idea
>> whether this actually works or not, and I have no way to test it.
>
> Would be cool if someone dumped out the relevant ACPI table(s) on
> a machine that needs this stuff, so that we can see if things look
> sane on that level.
I know, I've been asking.
BR,
Jani.
>
>>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>> drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 28 +++++++++++++++++++++++++++-
>> 1 file changed, 27 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> index 5e2c31d9a748..7e6a21c05c6a 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>
>> @@ -295,6 +296,31 @@ static void chv_exec_gpio(struct drm_i915_private *dev_priv,
>> mutex_unlock(&dev_priv->sb_lock);
>> }
>>
>> +static void bxt_exec_gpio(struct drm_i915_private *dev_priv,
>> + u8 gpio_source, u8 gpio_index, bool value)
>> +{
>> + /* XXX: this table is a quick ugly hack. */
>> + static struct gpio_desc *bxt_gpio_table[U8_MAX + 1];
>> + struct gpio_desc *gpio_desc = bxt_gpio_table[gpio_index];
>> +
>> + if (!gpio_desc) {
>> + gpio_desc = devm_gpiod_get_index(dev_priv->dev->dev,
>> + NULL, gpio_index,
>> + value ? GPIOD_OUT_LOW :
>> + GPIOD_OUT_HIGH);
>> +
>> + if (IS_ERR_OR_NULL(gpio_desc)) {
>> + DRM_ERROR("GPIO index %u request failed (%ld)\n",
>> + gpio_index, PTR_ERR(gpio_desc));
>> + return;
>> + }
>> +
>> + bxt_gpio_table[gpio_index] = gpio_desc;
>> + }
>> +
>> + gpiod_set_value(gpio_desc, value);
>> +}
>> +
>> static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
>> {
>> struct drm_device *dev = intel_dsi->base.base.dev;
>> @@ -321,7 +347,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
>> else if (IS_CHERRYVIEW(dev_priv))
>> chv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
>> else
>> - DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
>> + bxt_exec_gpio(dev_priv, gpio_source, gpio_index, value);
>>
>> return data;
>> }
>> --
>> 2.1.4
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 1/6] drm/i915/dsi: clean up vlv gpio table and definitions
2016-04-05 19:30 ` [PATCH v3 1/6] drm/i915/dsi: clean up vlv gpio table and definitions Jani Nikula
@ 2016-04-07 12:59 ` Ville Syrjälä
0 siblings, 0 replies; 19+ messages in thread
From: Ville Syrjälä @ 2016-04-07 12:59 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Tue, Apr 05, 2016 at 10:30:49PM +0300, Jani Nikula wrote:
> Define and store the pad base offset in the array, and reference the
> pconf0 and padval registers through macros. Add VLV prefixes to
> macros. Use spec nomenclature for pconf0 and padval.
>
> v2: Address Ville's review comments, squash another patch here.
>
> v3: Use the names Ville dug up in the specs.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 87 ++++++++++++++----------------
> 1 file changed, 39 insertions(+), 48 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> index af1a47b5224f..21964ba0bf34 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> @@ -58,50 +58,41 @@ static inline struct vbt_panel *to_vbt_panel(struct drm_panel *panel)
>
> #define NS_KHZ_RATIO 1000000
>
> -#define GPI0_NC_0_HV_DDI0_HPD 0x4130
> -#define GPIO_NC_0_HV_DDI0_PAD 0x4138
> -#define GPIO_NC_1_HV_DDI0_DDC_SDA 0x4120
> -#define GPIO_NC_1_HV_DDI0_DDC_SDA_PAD 0x4128
> -#define GPIO_NC_2_HV_DDI0_DDC_SCL 0x4110
> -#define GPIO_NC_2_HV_DDI0_DDC_SCL_PAD 0x4118
> -#define GPIO_NC_3_PANEL0_VDDEN 0x4140
> -#define GPIO_NC_3_PANEL0_VDDEN_PAD 0x4148
> -#define GPIO_NC_4_PANEL0_BLKEN 0x4150
> -#define GPIO_NC_4_PANEL0_BLKEN_PAD 0x4158
> -#define GPIO_NC_5_PANEL0_BLKCTL 0x4160
> -#define GPIO_NC_5_PANEL0_BLKCTL_PAD 0x4168
> -#define GPIO_NC_6_PCONF0 0x4180
> -#define GPIO_NC_6_PAD 0x4188
> -#define GPIO_NC_7_PCONF0 0x4190
> -#define GPIO_NC_7_PAD 0x4198
> -#define GPIO_NC_8_PCONF0 0x4170
> -#define GPIO_NC_8_PAD 0x4178
> -#define GPIO_NC_9_PCONF0 0x4100
> -#define GPIO_NC_9_PAD 0x4108
> -#define GPIO_NC_10_PCONF0 0x40E0
> -#define GPIO_NC_10_PAD 0x40E8
> -#define GPIO_NC_11_PCONF0 0x40F0
> -#define GPIO_NC_11_PAD 0x40F8
> +/* base offsets for gpio pads */
> +#define VLV_GPIO_NC_0_HV_DDI0_HPD 0x4130
> +#define VLV_GPIO_NC_1_HV_DDI0_DDC_SDA 0x4120
> +#define VLV_GPIO_NC_2_HV_DDI0_DDC_SCL 0x4110
> +#define VLV_GPIO_NC_3_PANEL0_VDDEN 0x4140
> +#define VLV_GPIO_NC_4_PANEL0_BKLTEN 0x4150
> +#define VLV_GPIO_NC_5_PANEL0_BKLTCTL 0x4160
> +#define VLV_GPIO_NC_6_HV_DDI1_HPD 0x4180
> +#define VLV_GPIO_NC_7_HV_DDI1_DDC_SDA 0x4190
> +#define VLV_GPIO_NC_8_HV_DDI1_DDC_SCL 0x4170
> +#define VLV_GPIO_NC_9_PANEL1_VDDEN 0x4100
> +#define VLV_GPIO_NC_10_PANEL1_BKLTEN 0x40E0
> +#define VLV_GPIO_NC_11_PANEL1_BKLTCTL 0x40F0
> +
> +#define VLV_GPIO_PCONF0(base_offset) (base_offset)
> +#define VLV_GPIO_PAD_VAL(base_offset) ((base_offset) + 8)
>
> struct gpio_table {
> - u16 function_reg;
> - u16 pad_reg;
> - u8 init;
> + u16 base_offset;
> + bool init;
> };
>
> -static struct gpio_table gtable[] = {
> - { GPI0_NC_0_HV_DDI0_HPD, GPIO_NC_0_HV_DDI0_PAD, 0 },
> - { GPIO_NC_1_HV_DDI0_DDC_SDA, GPIO_NC_1_HV_DDI0_DDC_SDA_PAD, 0 },
> - { GPIO_NC_2_HV_DDI0_DDC_SCL, GPIO_NC_2_HV_DDI0_DDC_SCL_PAD, 0 },
> - { GPIO_NC_3_PANEL0_VDDEN, GPIO_NC_3_PANEL0_VDDEN_PAD, 0 },
> - { GPIO_NC_4_PANEL0_BLKEN, GPIO_NC_4_PANEL0_BLKEN_PAD, 0 },
> - { GPIO_NC_5_PANEL0_BLKCTL, GPIO_NC_5_PANEL0_BLKCTL_PAD, 0 },
> - { GPIO_NC_6_PCONF0, GPIO_NC_6_PAD, 0 },
> - { GPIO_NC_7_PCONF0, GPIO_NC_7_PAD, 0 },
> - { GPIO_NC_8_PCONF0, GPIO_NC_8_PAD, 0 },
> - { GPIO_NC_9_PCONF0, GPIO_NC_9_PAD, 0 },
> - { GPIO_NC_10_PCONF0, GPIO_NC_10_PAD, 0},
> - { GPIO_NC_11_PCONF0, GPIO_NC_11_PAD, 0}
> +static struct gpio_table vlv_gpio_table[] = {
> + { VLV_GPIO_NC_0_HV_DDI0_HPD },
> + { VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
> + { VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
> + { VLV_GPIO_NC_3_PANEL0_VDDEN },
> + { VLV_GPIO_NC_4_PANEL0_BKLTEN },
> + { VLV_GPIO_NC_5_PANEL0_BKLTCTL },
> + { VLV_GPIO_NC_6_HV_DDI1_HPD },
> + { VLV_GPIO_NC_7_HV_DDI1_DDC_SDA },
> + { VLV_GPIO_NC_8_HV_DDI1_DDC_SCL },
> + { VLV_GPIO_NC_9_PANEL1_VDDEN },
> + { VLV_GPIO_NC_10_PANEL1_BKLTEN },
> + { VLV_GPIO_NC_11_PANEL1_BKLTCTL },
> };
>
> static inline enum port intel_dsi_seq_port_to_port(u8 port)
> @@ -199,7 +190,7 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
> static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
> {
> u8 gpio_source, gpio_index, action, port;
> - u16 function, pad;
> + u16 pconf0, padval;
> u32 val;
> struct drm_device *dev = intel_dsi->base.base.dev;
> struct drm_i915_private *dev_priv = dev->dev_private;
> @@ -218,7 +209,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
> /* pull up/down */
> action = *data++ & 1;
>
> - if (gpio_index >= ARRAY_SIZE(gtable)) {
> + if (gpio_index >= ARRAY_SIZE(vlv_gpio_table)) {
> DRM_DEBUG_KMS("unknown gpio index %u\n", gpio_index);
> goto out;
> }
> @@ -242,21 +233,21 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
> }
> }
>
> - function = gtable[gpio_index].function_reg;
> - pad = gtable[gpio_index].pad_reg;
> + pconf0 = VLV_GPIO_PCONF0(vlv_gpio_table[gpio_index].base_offset);
> + padval = VLV_GPIO_PAD_VAL(vlv_gpio_table[gpio_index].base_offset);
>
> mutex_lock(&dev_priv->sb_lock);
> - if (!gtable[gpio_index].init) {
> + if (!vlv_gpio_table[gpio_index].init) {
> /* program the function */
> /* FIXME: remove constant below */
> - vlv_iosf_sb_write(dev_priv, port, function, 0x2000CC00);
> - gtable[gpio_index].init = 1;
> + vlv_iosf_sb_write(dev_priv, port, pconf0, 0x2000CC00);
> + vlv_gpio_table[gpio_index].init = true;
> }
>
> val = 0x4 | action;
>
> /* pull up/down */
> - vlv_iosf_sb_write(dev_priv, port, pad, val);
> + vlv_iosf_sb_write(dev_priv, port, padval, val);
> mutex_unlock(&dev_priv->sb_lock);
>
> out:
> --
> 2.1.4
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 2/6] drm/i915/dsi: abstract VLV gpio element execution to a separate function
2016-04-05 19:30 ` [PATCH v3 2/6] drm/i915/dsi: abstract VLV gpio element execution to a separate function Jani Nikula
@ 2016-04-07 13:00 ` Ville Syrjälä
0 siblings, 0 replies; 19+ messages in thread
From: Ville Syrjälä @ 2016-04-07 13:00 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Tue, Apr 05, 2016 at 10:30:50PM +0300, Jani Nikula wrote:
> Prepare for future. No functional changes.
>
> v2: Move earlier in the series. Use bool for gpio value.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 68 +++++++++++++++---------------
> 1 file changed, 35 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> index 21964ba0bf34..6c2774ceb69f 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> @@ -187,41 +187,21 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
> return data;
> }
>
> -static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
> +static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
> + u8 gpio_source, u8 gpio_index, bool value)
> {
> - u8 gpio_source, gpio_index, action, port;
> u16 pconf0, padval;
> - u32 val;
> - struct drm_device *dev = intel_dsi->base.base.dev;
> - struct drm_i915_private *dev_priv = dev->dev_private;
> -
> - if (dev_priv->vbt.dsi.seq_version >= 3)
> - data++;
> -
> - gpio_index = *data++;
> -
> - /* gpio source in sequence v2 only */
> - if (dev_priv->vbt.dsi.seq_version == 2)
> - gpio_source = (*data >> 1) & 3;
> - else
> - gpio_source = 0;
> -
> - /* pull up/down */
> - action = *data++ & 1;
> + u32 tmp;
> + u8 port;
>
> if (gpio_index >= ARRAY_SIZE(vlv_gpio_table)) {
> DRM_DEBUG_KMS("unknown gpio index %u\n", gpio_index);
> - goto out;
> - }
> -
> - if (!IS_VALLEYVIEW(dev_priv)) {
> - DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
> - goto out;
> + return;
> }
>
> if (dev_priv->vbt.dsi.seq_version >= 3) {
> DRM_DEBUG_KMS("GPIO element v3 not supported\n");
> - goto out;
> + return;
> } else {
> if (gpio_source == 0) {
> port = IOSF_PORT_GPIO_NC;
> @@ -229,7 +209,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
> port = IOSF_PORT_GPIO_SC;
> } else {
> DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source);
> - goto out;
> + return;
> }
> }
>
> @@ -238,19 +218,41 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
>
> mutex_lock(&dev_priv->sb_lock);
> if (!vlv_gpio_table[gpio_index].init) {
> - /* program the function */
> - /* FIXME: remove constant below */
FIXME still seems valid.
Otherwise lgtm
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> vlv_iosf_sb_write(dev_priv, port, pconf0, 0x2000CC00);
> vlv_gpio_table[gpio_index].init = true;
> }
>
> - val = 0x4 | action;
> + tmp = 0x4 | value;
> + vlv_iosf_sb_write(dev_priv, port, padval, tmp);
> + mutex_unlock(&dev_priv->sb_lock);
> +}
> +
> +static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
> +{
> + struct drm_device *dev = intel_dsi->base.base.dev;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> + u8 gpio_source, gpio_index;
> + bool value;
> +
> + if (dev_priv->vbt.dsi.seq_version >= 3)
> + data++;
> +
> + gpio_index = *data++;
> +
> + /* gpio source in sequence v2 only */
> + if (dev_priv->vbt.dsi.seq_version == 2)
> + gpio_source = (*data >> 1) & 3;
> + else
> + gpio_source = 0;
>
> /* pull up/down */
> - vlv_iosf_sb_write(dev_priv, port, padval, val);
> - mutex_unlock(&dev_priv->sb_lock);
> + value = *data++ & 1;
> +
> + if (IS_VALLEYVIEW(dev_priv))
> + vlv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
> + else
> + DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
>
> -out:
> return data;
> }
>
> --
> 2.1.4
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 3/6] drm/i915/dsi: use a temp variable for referencing the gpio table
2016-04-05 19:30 ` [PATCH v3 3/6] drm/i915/dsi: use a temp variable for referencing the gpio table Jani Nikula
@ 2016-04-07 13:01 ` Ville Syrjälä
2016-04-07 13:39 ` Jani Nikula
0 siblings, 1 reply; 19+ messages in thread
From: Ville Syrjälä @ 2016-04-07 13:01 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Tue, Apr 05, 2016 at 10:30:51PM +0300, Jani Nikula wrote:
> The shorthand is easier. Also change the struct name. No functional
> changes.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> index 6c2774ceb69f..ff0731420677 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> @@ -75,12 +75,12 @@ static inline struct vbt_panel *to_vbt_panel(struct drm_panel *panel)
> #define VLV_GPIO_PCONF0(base_offset) (base_offset)
> #define VLV_GPIO_PAD_VAL(base_offset) ((base_offset) + 8)
>
> -struct gpio_table {
> +struct gpio_map {
> u16 base_offset;
> bool init;
> };
>
> -static struct gpio_table vlv_gpio_table[] = {
> +static struct gpio_map vlv_gpio_table[] = {
> { VLV_GPIO_NC_0_HV_DDI0_HPD },
> { VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
> { VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
> @@ -190,6 +190,7 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
> static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
> u8 gpio_source, u8 gpio_index, bool value)
> {
> + struct gpio_map *map;
> u16 pconf0, padval;
> u32 tmp;
> u8 port;
> @@ -199,6 +200,8 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
> return;
> }
>
> + map = &vlv_gpio_table[gpio_index];
> +
> if (dev_priv->vbt.dsi.seq_version >= 3) {
> DRM_DEBUG_KMS("GPIO element v3 not supported\n");
> return;
> @@ -213,13 +216,13 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
> }
> }
>
> - pconf0 = VLV_GPIO_PCONF0(vlv_gpio_table[gpio_index].base_offset);
> - padval = VLV_GPIO_PAD_VAL(vlv_gpio_table[gpio_index].base_offset);
> + pconf0 = VLV_GPIO_PCONF0(map->base_offset);
> + padval = VLV_GPIO_PAD_VAL(map->base_offset);
>
> mutex_lock(&dev_priv->sb_lock);
> - if (!vlv_gpio_table[gpio_index].init) {
> + if (!map->init) {
> vlv_iosf_sb_write(dev_priv, port, pconf0, 0x2000CC00);
> - vlv_gpio_table[gpio_index].init = true;
> + map->init = true;
> }
>
> tmp = 0x4 | value;
> --
> 2.1.4
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 4/6] drm/i915/dsi: add support for sequence block v3 gpio for VLV
2016-04-05 19:30 ` [PATCH v3 4/6] drm/i915/dsi: add support for sequence block v3 gpio for VLV Jani Nikula
@ 2016-04-07 13:04 ` Ville Syrjälä
2016-04-07 13:14 ` Jani Nikula
0 siblings, 1 reply; 19+ messages in thread
From: Ville Syrjälä @ 2016-04-07 13:04 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Tue, Apr 05, 2016 at 10:30:52PM +0300, Jani Nikula wrote:
> Just put the iosf port in the gpio table. The table might include some
> duplication, but this approach keeps the code the cleanest.
>
> v2: pack the struct better (Ville), use designated initializers, add
> debug logging for mismatching ports
Is that even possible? As in is the index global instead of per port?
Was there a patch to add !NC GPIOs for VLV?
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 31 ++++++++++++++++--------------
> 1 file changed, 17 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> index ff0731420677..98583f37f5c7 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> @@ -77,22 +77,23 @@ static inline struct vbt_panel *to_vbt_panel(struct drm_panel *panel)
>
> struct gpio_map {
> u16 base_offset;
> + u8 port;
> bool init;
> };
>
> static struct gpio_map vlv_gpio_table[] = {
> - { VLV_GPIO_NC_0_HV_DDI0_HPD },
> - { VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
> - { VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
> - { VLV_GPIO_NC_3_PANEL0_VDDEN },
> - { VLV_GPIO_NC_4_PANEL0_BKLTEN },
> - { VLV_GPIO_NC_5_PANEL0_BKLTCTL },
> - { VLV_GPIO_NC_6_HV_DDI1_HPD },
> - { VLV_GPIO_NC_7_HV_DDI1_DDC_SDA },
> - { VLV_GPIO_NC_8_HV_DDI1_DDC_SCL },
> - { VLV_GPIO_NC_9_PANEL1_VDDEN },
> - { VLV_GPIO_NC_10_PANEL1_BKLTEN },
> - { VLV_GPIO_NC_11_PANEL1_BKLTCTL },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_0_HV_DDI0_HPD },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_3_PANEL0_VDDEN },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_4_PANEL0_BKLTEN },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_5_PANEL0_BKLTCTL },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_6_HV_DDI1_HPD },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_7_HV_DDI1_DDC_SDA },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_8_HV_DDI1_DDC_SCL },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_9_PANEL1_VDDEN },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_10_PANEL1_BKLTEN },
> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_11_PANEL1_BKLTCTL },
> };
>
> static inline enum port intel_dsi_seq_port_to_port(u8 port)
> @@ -203,8 +204,7 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
> map = &vlv_gpio_table[gpio_index];
>
> if (dev_priv->vbt.dsi.seq_version >= 3) {
> - DRM_DEBUG_KMS("GPIO element v3 not supported\n");
> - return;
> + port = map->port;
> } else {
> if (gpio_source == 0) {
> port = IOSF_PORT_GPIO_NC;
> @@ -214,6 +214,9 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
> DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source);
> return;
> }
> +
> + if (port != map->port)
> + DRM_DEBUG_KMS("suspect gpio source %u\n", gpio_source);
> }
>
> pconf0 = VLV_GPIO_PCONF0(map->base_offset);
> --
> 2.1.4
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 4/6] drm/i915/dsi: add support for sequence block v3 gpio for VLV
2016-04-07 13:04 ` Ville Syrjälä
@ 2016-04-07 13:14 ` Jani Nikula
0 siblings, 0 replies; 19+ messages in thread
From: Jani Nikula @ 2016-04-07 13:14 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx
On Thu, 07 Apr 2016, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Tue, Apr 05, 2016 at 10:30:52PM +0300, Jani Nikula wrote:
>> Just put the iosf port in the gpio table. The table might include some
>> duplication, but this approach keeps the code the cleanest.
>>
>> v2: pack the struct better (Ville), use designated initializers, add
>> debug logging for mismatching ports
>
> Is that even possible? As in is the index global instead of per port?
> Was there a patch to add !NC GPIOs for VLV?
Aww damn. I guess this is wrong:
commit 1d96a4a8ace6c1b08c7d203d9533b14e59f2200b
Author: Jani Nikula <jani.nikula@intel.com>
Date: Fri Mar 18 13:11:10 2016 +0200
drm/i915/dsi: add support for DSI sequence block v2 gpio element
>
>>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>> drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 31 ++++++++++++++++--------------
>> 1 file changed, 17 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> index ff0731420677..98583f37f5c7 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> @@ -77,22 +77,23 @@ static inline struct vbt_panel *to_vbt_panel(struct drm_panel *panel)
>>
>> struct gpio_map {
>> u16 base_offset;
>> + u8 port;
>> bool init;
>> };
>>
>> static struct gpio_map vlv_gpio_table[] = {
>> - { VLV_GPIO_NC_0_HV_DDI0_HPD },
>> - { VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
>> - { VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
>> - { VLV_GPIO_NC_3_PANEL0_VDDEN },
>> - { VLV_GPIO_NC_4_PANEL0_BKLTEN },
>> - { VLV_GPIO_NC_5_PANEL0_BKLTCTL },
>> - { VLV_GPIO_NC_6_HV_DDI1_HPD },
>> - { VLV_GPIO_NC_7_HV_DDI1_DDC_SDA },
>> - { VLV_GPIO_NC_8_HV_DDI1_DDC_SCL },
>> - { VLV_GPIO_NC_9_PANEL1_VDDEN },
>> - { VLV_GPIO_NC_10_PANEL1_BKLTEN },
>> - { VLV_GPIO_NC_11_PANEL1_BKLTCTL },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_0_HV_DDI0_HPD },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_3_PANEL0_VDDEN },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_4_PANEL0_BKLTEN },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_5_PANEL0_BKLTCTL },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_6_HV_DDI1_HPD },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_7_HV_DDI1_DDC_SDA },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_8_HV_DDI1_DDC_SCL },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_9_PANEL1_VDDEN },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_10_PANEL1_BKLTEN },
>> + { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_11_PANEL1_BKLTCTL },
>> };
>>
>> static inline enum port intel_dsi_seq_port_to_port(u8 port)
>> @@ -203,8 +204,7 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
>> map = &vlv_gpio_table[gpio_index];
>>
>> if (dev_priv->vbt.dsi.seq_version >= 3) {
>> - DRM_DEBUG_KMS("GPIO element v3 not supported\n");
>> - return;
>> + port = map->port;
>> } else {
>> if (gpio_source == 0) {
>> port = IOSF_PORT_GPIO_NC;
>> @@ -214,6 +214,9 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
>> DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source);
>> return;
>> }
>> +
>> + if (port != map->port)
>> + DRM_DEBUG_KMS("suspect gpio source %u\n", gpio_source);
>> }
>>
>> pconf0 = VLV_GPIO_PCONF0(map->base_offset);
>> --
>> 2.1.4
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 5/6] drm/i915/dsi: add support for gpio elements on CHV
2016-04-05 19:30 ` [PATCH v3 5/6] drm/i915/dsi: add support for gpio elements on CHV Jani Nikula
@ 2016-04-07 13:16 ` Ville Syrjälä
0 siblings, 0 replies; 19+ messages in thread
From: Ville Syrjälä @ 2016-04-07 13:16 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Tue, Apr 05, 2016 at 10:30:53PM +0300, Jani Nikula wrote:
> Add support for CHV gpio programming in DSI gpio elements.
>
> v2: Overhaul macros according to Ville's review.
>
> [Rewritten by Jani, based on earlier work by Yogesh and Deepak.]
>
> Signed-off-by: Yogesh Mohan Marimuthu <yogesh.mohan.marimuthu@intel.com>
> Signed-off-by: Deepak M <m.deepak@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 64 ++++++++++++++++++++++++++++++
> 1 file changed, 64 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> index 98583f37f5c7..5e2c31d9a748 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> @@ -96,6 +96,24 @@ static struct gpio_map vlv_gpio_table[] = {
> { .port = IOSF_PORT_GPIO_NC, .base_offset = VLV_GPIO_NC_11_PANEL1_BKLTCTL },
> };
>
> +#define CHV_GPIO_IDX_START_N 0
> +#define CHV_GPIO_IDX_START_SE 73
> +#define CHV_GPIO_IDX_START_SW 100
> +#define CHV_GPIO_IDX_START_E 198
Hmm. These don't actually match the "spec" we got. In the docs E is
73-99 and SE 198-255.
Actually the spec is inconsistent with itself since it claims
198-255 map to SE 0-56. Either it should be 198-254 or 0-57.
> +
> +#define CHV_VBT_MAX_PINS_PER_FMLY 15
> +
> +#define CHV_GPIO_PAD_CFG0(f, i) (0x4400 + (f) * 0x400 + (i) * 8)
The bit defines should be here, except for CFGLOCK which is for CFG1.
> +#define CHV_GPIO_PAD_CFG1(f, i) (0x4400 + (f) * 0x400 + (i) * 8 + 4)
> +
> +#define CHV_GPIO_CFGLOCK (1 << 31)
> +#define CHV_GPIO_GPIOEN (1 << 15)
> +#define CHV_GPIO_GPIOCFG_GPIO (0 << 8)
> +#define CHV_GPIO_GPIOCFG_GPO (1 << 8)
> +#define CHV_GPIO_GPIOCFG_GPI (2 << 8)
> +#define CHV_GPIO_GPIOCFG_HIZ (3 << 8)
> +#define CHV_GPIO_GPIOTXSTATE(state) ((!!(state)) << 1)
> +
> static inline enum port intel_dsi_seq_port_to_port(u8 port)
> {
> return port ? PORT_C : PORT_A;
> @@ -233,6 +251,50 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
> mutex_unlock(&dev_priv->sb_lock);
> }
>
> +static void chv_exec_gpio(struct drm_i915_private *dev_priv,
> + u8 gpio_source, u8 gpio_index, bool value)
> +{
> + u16 cfg0, cfg1;
> + u16 family_num;
> + u8 port;
> +
> + if (dev_priv->vbt.dsi.seq_version >= 3) {
> + if (gpio_index >= CHV_GPIO_IDX_START_E) {
> + gpio_index -= CHV_GPIO_IDX_START_E;
> + port = CHV_IOSF_PORT_GPIO_E;
> + } else if (gpio_index >= CHV_GPIO_IDX_START_SW) {
> + gpio_index -= CHV_GPIO_IDX_START_SW;
> + port = CHV_IOSF_PORT_GPIO_SW;
> + } else if (gpio_index >= CHV_GPIO_IDX_START_SE) {
> + gpio_index -= CHV_GPIO_IDX_START_SE;
> + port = CHV_IOSF_PORT_GPIO_SE;
> + } else {
> + port = CHV_IOSF_PORT_GPIO_N;
> + }
> + } else {
> + if (gpio_source == 0) {
> + port = IOSF_PORT_GPIO_NC;
> + } else if (gpio_source == 1) {
> + port = IOSF_PORT_GPIO_SC;
> + } else {
> + DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source);
> + return;
> + }
> + }
> +
> + family_num = gpio_index / CHV_VBT_MAX_PINS_PER_FMLY;
> + gpio_index = gpio_index % CHV_VBT_MAX_PINS_PER_FMLY;
> +
> + cfg0 = CHV_GPIO_PAD_CFG0(family_num, gpio_index);
> + cfg1 = CHV_GPIO_PAD_CFG1(family_num, gpio_index);
> +
> + mutex_lock(&dev_priv->sb_lock);
> + vlv_iosf_sb_write(dev_priv, port, cfg0, 0);
> + vlv_iosf_sb_write(dev_priv, port, cfg1,
> + CHV_GPIO_GPIOCFG_HIZ | CHV_GPIO_GPIOTXSTATE(value));
We want GPO, not HIZ. Also cfg0 and cfg1 got swapped around.
> + mutex_unlock(&dev_priv->sb_lock);
> +}
> +
> static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
> {
> struct drm_device *dev = intel_dsi->base.base.dev;
> @@ -256,6 +318,8 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
>
> if (IS_VALLEYVIEW(dev_priv))
> vlv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
> + else if (IS_CHERRYVIEW(dev_priv))
> + chv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
> else
> DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
>
> --
> 2.1.4
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 3/6] drm/i915/dsi: use a temp variable for referencing the gpio table
2016-04-07 13:01 ` Ville Syrjälä
@ 2016-04-07 13:39 ` Jani Nikula
0 siblings, 0 replies; 19+ messages in thread
From: Jani Nikula @ 2016-04-07 13:39 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx
On Thu, 07 Apr 2016, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Tue, Apr 05, 2016 at 10:30:51PM +0300, Jani Nikula wrote:
>> The shorthand is easier. Also change the struct name. No functional
>> changes.
>>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Pushed the first three to drm-intel-next-queued, with the fixme comment
restored in patch 2, thanks for the review.
BR,
Jani.
>
>> ---
>> drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 15 +++++++++------
>> 1 file changed, 9 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> index 6c2774ceb69f..ff0731420677 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> @@ -75,12 +75,12 @@ static inline struct vbt_panel *to_vbt_panel(struct drm_panel *panel)
>> #define VLV_GPIO_PCONF0(base_offset) (base_offset)
>> #define VLV_GPIO_PAD_VAL(base_offset) ((base_offset) + 8)
>>
>> -struct gpio_table {
>> +struct gpio_map {
>> u16 base_offset;
>> bool init;
>> };
>>
>> -static struct gpio_table vlv_gpio_table[] = {
>> +static struct gpio_map vlv_gpio_table[] = {
>> { VLV_GPIO_NC_0_HV_DDI0_HPD },
>> { VLV_GPIO_NC_1_HV_DDI0_DDC_SDA },
>> { VLV_GPIO_NC_2_HV_DDI0_DDC_SCL },
>> @@ -190,6 +190,7 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
>> static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
>> u8 gpio_source, u8 gpio_index, bool value)
>> {
>> + struct gpio_map *map;
>> u16 pconf0, padval;
>> u32 tmp;
>> u8 port;
>> @@ -199,6 +200,8 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
>> return;
>> }
>>
>> + map = &vlv_gpio_table[gpio_index];
>> +
>> if (dev_priv->vbt.dsi.seq_version >= 3) {
>> DRM_DEBUG_KMS("GPIO element v3 not supported\n");
>> return;
>> @@ -213,13 +216,13 @@ static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
>> }
>> }
>>
>> - pconf0 = VLV_GPIO_PCONF0(vlv_gpio_table[gpio_index].base_offset);
>> - padval = VLV_GPIO_PAD_VAL(vlv_gpio_table[gpio_index].base_offset);
>> + pconf0 = VLV_GPIO_PCONF0(map->base_offset);
>> + padval = VLV_GPIO_PAD_VAL(map->base_offset);
>>
>> mutex_lock(&dev_priv->sb_lock);
>> - if (!vlv_gpio_table[gpio_index].init) {
>> + if (!map->init) {
>> vlv_iosf_sb_write(dev_priv, port, pconf0, 0x2000CC00);
>> - vlv_gpio_table[gpio_index].init = true;
>> + map->init = true;
>> }
>>
>> tmp = 0x4 | value;
>> --
>> 2.1.4
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH] drm/i915/bxt: add bxt dsi gpio element support
@ 2016-11-15 15:44 Jani Nikula
0 siblings, 0 replies; 19+ messages in thread
From: Jani Nikula @ 2016-11-15 15:44 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Request the GPIO by index through the consumer API. For now, use a quick
hack to store the already requested ones, simply because I have no idea
whether this actually works or not, and I have no way to test it.
Cc: Mika Kahola <mika.kahola@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 38 +++++++++++++++++++++++++-----
1 file changed, 32 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index 9f279a3d0f74..41e0eeac97f4 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/consumer.h>
#include <linux/slab.h>
#include <video/mipi_display.h>
#include <asm/intel-mid.h>
@@ -304,19 +305,44 @@ static void chv_exec_gpio(struct drm_i915_private *dev_priv,
mutex_unlock(&dev_priv->sb_lock);
}
+static void bxt_exec_gpio(struct drm_i915_private *dev_priv,
+ u8 gpio_source, u8 gpio_index, bool value)
+{
+ /* XXX: this table is a quick ugly hack. */
+ static struct gpio_desc *bxt_gpio_table[U8_MAX + 1];
+ struct gpio_desc *gpio_desc = bxt_gpio_table[gpio_index];
+
+ if (!gpio_desc) {
+ gpio_desc = devm_gpiod_get_index(dev_priv->drm.dev,
+ NULL, gpio_index,
+ value ? GPIOD_OUT_LOW :
+ GPIOD_OUT_HIGH);
+
+ if (IS_ERR_OR_NULL(gpio_desc)) {
+ DRM_ERROR("GPIO index %u request failed (%ld)\n",
+ gpio_index, PTR_ERR(gpio_desc));
+ return;
+ }
+
+ bxt_gpio_table[gpio_index] = gpio_desc;
+ }
+
+ gpiod_set_value(gpio_desc, value);
+}
+
static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
{
struct drm_device *dev = intel_dsi->base.base.dev;
struct drm_i915_private *dev_priv = to_i915(dev);
- u8 gpio_source, gpio_index;
+ u8 gpio_source, gpio_index = 0, gpio_number;
bool value;
DRM_DEBUG_KMS("\n");
if (dev_priv->vbt.dsi.seq_version >= 3)
- data++;
+ gpio_index = *data++;
- gpio_index = *data++;
+ gpio_number = *data++;
/* gpio source in sequence v2 only */
if (dev_priv->vbt.dsi.seq_version == 2)
@@ -328,11 +354,11 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
value = *data++ & 1;
if (IS_VALLEYVIEW(dev_priv))
- vlv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
+ vlv_exec_gpio(dev_priv, gpio_source, gpio_number, value);
else if (IS_CHERRYVIEW(dev_priv))
- chv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
+ chv_exec_gpio(dev_priv, gpio_source, gpio_number, value);
else
- DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
+ bxt_exec_gpio(dev_priv, gpio_source, gpio_index, value);
return data;
}
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
end of thread, other threads:[~2016-11-15 15:44 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-05 19:30 [PATCH v3 0/6] drm/i915/dsi: improved gpio element support for vlv/chv/bxt Jani Nikula
2016-04-05 19:30 ` [PATCH v3 1/6] drm/i915/dsi: clean up vlv gpio table and definitions Jani Nikula
2016-04-07 12:59 ` Ville Syrjälä
2016-04-05 19:30 ` [PATCH v3 2/6] drm/i915/dsi: abstract VLV gpio element execution to a separate function Jani Nikula
2016-04-07 13:00 ` Ville Syrjälä
2016-04-05 19:30 ` [PATCH v3 3/6] drm/i915/dsi: use a temp variable for referencing the gpio table Jani Nikula
2016-04-07 13:01 ` Ville Syrjälä
2016-04-07 13:39 ` Jani Nikula
2016-04-05 19:30 ` [PATCH v3 4/6] drm/i915/dsi: add support for sequence block v3 gpio for VLV Jani Nikula
2016-04-07 13:04 ` Ville Syrjälä
2016-04-07 13:14 ` Jani Nikula
2016-04-05 19:30 ` [PATCH v3 5/6] drm/i915/dsi: add support for gpio elements on CHV Jani Nikula
2016-04-07 13:16 ` Ville Syrjälä
2016-04-05 19:30 ` [PATCH v3 6/6] drm/i915/bxt: add bxt dsi gpio element support Jani Nikula
2016-04-07 11:47 ` [PATCH] " Jani Nikula
2016-04-07 12:21 ` Ville Syrjälä
2016-04-07 12:55 ` Jani Nikula
2016-04-06 7:27 ` ✗ Fi.CI.BAT: failure for drm/i915/dsi: improved gpio element support for vlv/chv/bxt (rev2) Patchwork
2016-11-15 15:44 [PATCH] drm/i915/bxt: add bxt dsi gpio element support Jani Nikula
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.