* [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders
@ 2026-01-13 15:31 Andreas Kemnade
2026-01-13 15:31 ` [PATCH 1/3] ARM: dts: imx: tolino-shine2: add tps65185 Andreas Kemnade
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Andreas Kemnade @ 2026-01-13 15:31 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, imx, linux-arm-kernel, linux-kernel, Andreas Kemnade,
Josua Mayer
As the driver is now upstream, wire it up for various ebook readers
containing imx6sl/6sll/50 SoCs.
The driver for the EPD itself (not included) still needs polishing
which would be the consumer for these regulators.
Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
Andreas Kemnade (2):
ARM: dts: imx: tolino-shine2: add tps65185
ARM: dts: imx: e60k02: add tps65185
Josua Mayer (1):
ARM: dts: imx50-kobo-aura: add epd pmic description
arch/arm/boot/dts/nxp/imx/e60k02.dtsi | 35 ++++++++++++-
arch/arm/boot/dts/nxp/imx/imx50-kobo-aura.dts | 60 +++++++++++++++++++++-
.../boot/dts/nxp/imx/imx6sl-tolino-shine2hd.dts | 55 +++++++++++++++++++-
arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine3.dts | 26 ++++++++++
arch/arm/boot/dts/nxp/imx/imx6sll-kobo-clarahd.dts | 26 ++++++++++
5 files changed, 199 insertions(+), 3 deletions(-)
---
base-commit: 9448598b22c50c8a5bb77a9103e2d49f134c9578
change-id: 20260113-tps65185-dt-eed74a08950c
Best regards,
--
Andreas Kemnade <andreas@kemnade.info>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] ARM: dts: imx: tolino-shine2: add tps65185
2026-01-13 15:31 [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders Andreas Kemnade
@ 2026-01-13 15:31 ` Andreas Kemnade
2026-01-13 15:31 ` [PATCH 2/3] ARM: dts: imx50-kobo-aura: add epd pmic description Andreas Kemnade
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Andreas Kemnade @ 2026-01-13 15:31 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, imx, linux-arm-kernel, linux-kernel, Andreas Kemnade
Wire up the TPS65185 regulator needed for the display.
Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
.../boot/dts/nxp/imx/imx6sl-tolino-shine2hd.dts | 55 +++++++++++++++++++++-
1 file changed, 54 insertions(+), 1 deletion(-)
diff --git a/arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine2hd.dts b/arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine2hd.dts
index b6c336e3079e..4c655579f43e 100644
--- a/arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine2hd.dts
+++ b/arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine2hd.dts
@@ -37,6 +37,16 @@ chosen {
stdout-path = &uart1;
};
+ epd_pmic_supply: regulator-epd-pmic-in {
+ compatible = "regulator-fixed";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_epd_pmic_supply>;
+ regulator-name = "epd_pmic_supply";
+ gpio = <&gpio2 14 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ startup-delay-us = <20000>;
+ };
+
gpio_keys: gpio-keys {
compatible = "gpio-keys";
pinctrl-names = "default";
@@ -147,8 +157,35 @@ zforce: touchscreen@50 {
touchscreen-inverted-x;
};
- /* TODO: TPS65185 PMIC for E Ink at 0x68 */
+ tps65185: pmic@68 {
+ compatible = "ti,tps65185";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_tps65185_gpio>;
+ reg = <0x68>;
+ interrupt-parent = <&gpio2>;
+ interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
+ vin-supply = <&epd_pmic_supply>;
+ pwr-good-gpios = <&gpio2 13 GPIO_ACTIVE_HIGH>;
+ vcom-ctrl-gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>;
+ wakeup-gpios = <&gpio2 7 GPIO_ACTIVE_HIGH>;
+ enable-gpios = <&gpio2 8 GPIO_ACTIVE_HIGH>;
+
+ regulators {
+ vcom_reg: vcom {
+ regulator-name = "vcom";
+ };
+
+ vposneg_reg: vposneg {
+ regulator-name = "vposneg";
+ regulator-min-microvolt = <15000000>;
+ regulator-max-microvolt = <15000000>;
+ };
+ v3p3_reg: v3p3 {
+ regulator-name = "v3p3";
+ };
+ };
+ };
};
&i2c3 {
@@ -328,6 +365,12 @@ MX6SL_PAD_EPDC_PWRCTRL3__GPIO2_IO10 0x10059
>;
};
+ pinctrl_epd_pmic_supply: epdc-pmic-supplygrp {
+ fsl,pins = <
+ MX6SL_PAD_EPDC_PWRWAKEUP__GPIO2_IO14 0x40010059 /* pwrall */
+ >;
+ };
+
pinctrl_gpio_keys: gpio-keysgrp {
fsl,pins = <
MX6SL_PAD_SD1_DAT1__GPIO5_IO08 0x17059
@@ -425,6 +468,16 @@ MX6SL_PAD_KEY_COL2__GPIO3_IO28 0x1b8b1 /* ricoh619 bat_low_int */
>;
};
+ pinctrl_tps65185_gpio: tps65185-gpio-grp {
+ fsl,pins = <
+ MX6SL_PAD_EPDC_VCOM0__GPIO2_IO03 0x40010059 /* vcom_ctrl */
+ MX6SL_PAD_EPDC_PWRCTRL0__GPIO2_IO07 0x40010059 /* wakeup */
+ MX6SL_PAD_EPDC_PWRCTRL1__GPIO2_IO08 0x40010059 /* enable */
+ MX6SL_PAD_EPDC_PWRCTRL2__GPIO2_IO09 0x17059 /* nINT */
+ MX6SL_PAD_EPDC_PWRSTAT__GPIO2_IO13 0x17059 /* pwr-good */
+ >;
+ };
+
pinctrl_uart1: uart1grp {
fsl,pins = <
MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x1b0b1
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] ARM: dts: imx50-kobo-aura: add epd pmic description
2026-01-13 15:31 [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders Andreas Kemnade
2026-01-13 15:31 ` [PATCH 1/3] ARM: dts: imx: tolino-shine2: add tps65185 Andreas Kemnade
@ 2026-01-13 15:31 ` Andreas Kemnade
2026-01-13 15:31 ` [PATCH 3/3] ARM: dts: imx: e60k02: add tps65185 Andreas Kemnade
2026-01-18 2:11 ` [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders Shawn Guo
3 siblings, 0 replies; 5+ messages in thread
From: Andreas Kemnade @ 2026-01-13 15:31 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, imx, linux-arm-kernel, linux-kernel, Andreas Kemnade,
Josua Mayer
From: Josua Mayer <josua.mayer@jm0.eu>
Kobo Aura (N514) includes a TPS65185 PMIC for the epaper display.
Add description for this pmic and its vin power-supply.
Signed-off-by: Josua Mayer <josua.mayer@jm0.eu>
Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
arch/arm/boot/dts/nxp/imx/imx50-kobo-aura.dts | 60 ++++++++++++++++++++++++++-
1 file changed, 59 insertions(+), 1 deletion(-)
diff --git a/arch/arm/boot/dts/nxp/imx/imx50-kobo-aura.dts b/arch/arm/boot/dts/nxp/imx/imx50-kobo-aura.dts
index b1a6a9c58ac3..4725ee241cb1 100644
--- a/arch/arm/boot/dts/nxp/imx/imx50-kobo-aura.dts
+++ b/arch/arm/boot/dts/nxp/imx/imx50-kobo-aura.dts
@@ -58,6 +58,16 @@ event-frontlight {
};
};
+ epd_pmic_supply: regulator-epd-pmic-in {
+ compatible = "regulator-fixed";
+ regulator-name = "epd_pmic_supply";
+ gpio = <&gpio1 27 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ startup-delay-us = <20000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_epd_pmic_supply>;
+ };
+
sd2_pwrseq: pwrseq {
compatible = "mmc-pwrseq-simple";
pinctrl-names = "default";
@@ -135,7 +145,34 @@ &i2c2 {
pinctrl-0 = <&pinctrl_i2c2>;
status = "okay";
- /* TODO: TPS65185 PMIC for E Ink at 0x68 */
+ pmic@68 {
+ compatible = "ti,tps65185";
+ reg = <0x68>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_epd_pmic>;
+ pwr-good-gpios = <&gpio3 28 GPIO_ACTIVE_HIGH>;
+ vcom-ctrl-gpios = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+ enable-gpios = <&gpio3 30 GPIO_ACTIVE_HIGH>;
+ wakeup-gpios = <&gpio3 29 GPIO_ACTIVE_HIGH>;
+ vin-supply = <&epd_pmic_supply>;
+ interrupts-extended = <&gpio4 15 IRQ_TYPE_LEVEL_LOW>;
+
+ regulators {
+ vcom {
+ regulator-name = "vcom";
+ };
+
+ vposneg {
+ regulator-name = "vposneg";
+ regulator-min-microvolt = <15000000>;
+ regulator-max-microvolt = <15000000>;
+ };
+
+ v3p3 {
+ regulator-name = "v3p3";
+ };
+ };
+ };
};
&i2c3 {
@@ -161,6 +198,27 @@ MX50_PAD_CSPI_SS0__GPIO4_11 0x0 /* INT */
>;
};
+ pinctrl_epd_pmic: epd-pmic-grp {
+ fsl,pins = <
+ /* PWRUP */
+ MX50_PAD_EPDC_PWRCTRL1__GPIO3_30 0x0
+ /* WAKEUP */
+ MX50_PAD_EPDC_PWRCTRL0__GPIO3_29 0x0
+ /* VCOMCTRL */
+ MX50_PAD_EPDC_VCOM0__GPIO4_21 0x0
+ /* PWRGOOD: enable internal 100k pull-up */
+ MX50_PAD_EPDC_PWRSTAT__GPIO3_28 0xe0
+ /* INT: enable internal 100k pull-up */
+ MX50_PAD_ECSPI1_SS0__GPIO4_15 0xe0
+ >;
+ };
+
+ pinctrl_epd_pmic_supply: epd-pmic-supply-grp {
+ fsl,pins = <
+ MX50_PAD_EIM_CRE__GPIO1_27 0x0
+ >;
+ };
+
pinctrl_gpiokeys: gpiokeysgrp {
fsl,pins = <
MX50_PAD_CSPI_MISO__GPIO4_10 0x0
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] ARM: dts: imx: e60k02: add tps65185
2026-01-13 15:31 [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders Andreas Kemnade
2026-01-13 15:31 ` [PATCH 1/3] ARM: dts: imx: tolino-shine2: add tps65185 Andreas Kemnade
2026-01-13 15:31 ` [PATCH 2/3] ARM: dts: imx50-kobo-aura: add epd pmic description Andreas Kemnade
@ 2026-01-13 15:31 ` Andreas Kemnade
2026-01-18 2:11 ` [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders Shawn Guo
3 siblings, 0 replies; 5+ messages in thread
From: Andreas Kemnade @ 2026-01-13 15:31 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, imx, linux-arm-kernel, linux-kernel, Andreas Kemnade
Wire up the TPS65185 regulator needed for the display.
Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
arch/arm/boot/dts/nxp/imx/e60k02.dtsi | 35 +++++++++++++++++++++-
arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine3.dts | 26 ++++++++++++++++
arch/arm/boot/dts/nxp/imx/imx6sll-kobo-clarahd.dts | 26 ++++++++++++++++
3 files changed, 86 insertions(+), 1 deletion(-)
diff --git a/arch/arm/boot/dts/nxp/imx/e60k02.dtsi b/arch/arm/boot/dts/nxp/imx/e60k02.dtsi
index 0029c12f16c8..aac7b9ef7627 100644
--- a/arch/arm/boot/dts/nxp/imx/e60k02.dtsi
+++ b/arch/arm/boot/dts/nxp/imx/e60k02.dtsi
@@ -23,6 +23,14 @@ chosen {
stdout-path = &uart1;
};
+ epd_pmic_supply: regulator-epd-pmic-in {
+ compatible = "regulator-fixed";
+ regulator-name = "epd_pmic_supply";
+ gpio = <&gpio2 14 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ startup-delay-us = <20000>;
+ };
+
gpio_keys: gpio-keys {
compatible = "gpio-keys";
@@ -119,8 +127,33 @@ touchscreen@24 {
vdd-supply = <&ldo5_reg>;
};
- /* TODO: TPS65185 PMIC for E Ink at 0x68 */
+ tps65185: pmic@68 {
+ compatible = "ti,tps65185";
+ reg = <0x68>;
+ interrupt-parent = <&gpio2>;
+ interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
+ vin-supply = <&epd_pmic_supply>;
+ pwr-good-gpios = <&gpio2 13 GPIO_ACTIVE_HIGH>;
+ vcom-ctrl-gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>;
+ wakeup-gpios = <&gpio2 7 GPIO_ACTIVE_HIGH>;
+ enable-gpios = <&gpio2 8 GPIO_ACTIVE_HIGH>;
+
+ regulators {
+ vcom_reg: vcom {
+ regulator-name = "vcom";
+ };
+
+ vposneg_reg: vposneg {
+ regulator-name = "vposneg";
+ regulator-min-microvolt = <15000000>;
+ regulator-max-microvolt = <15000000>;
+ };
+ v3p3_reg: v3p3 {
+ regulator-name = "v3p3";
+ };
+ };
+ };
};
&i2c3 {
diff --git a/arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine3.dts b/arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine3.dts
index 5ba6f15e9ed5..58b9ccd9b605 100644
--- a/arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine3.dts
+++ b/arch/arm/boot/dts/nxp/imx/imx6sl-tolino-shine3.dts
@@ -26,6 +26,11 @@ / {
compatible = "kobo,tolino-shine3", "fsl,imx6sl";
};
+&epd_pmic_supply {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_epd_pmic_supply>;
+};
+
&gpio_keys {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio_keys>;
@@ -59,6 +64,12 @@ MX6SL_PAD_SD1_DAT2__GPIO5_IO13 0x10059 /* TP_RST */
>;
};
+ pinctrl_epd_pmic_supply: epdc-pmic-supplygrp {
+ fsl,pins = <
+ MX6SL_PAD_EPDC_PWRWAKEUP__GPIO2_IO14 0x40010059
+ >;
+ };
+
pinctrl_gpio_keys: gpio-keysgrp {
fsl,pins = <
MX6SL_PAD_SD1_DAT1__GPIO5_IO08 0x17059 /* PWR_SW */
@@ -159,6 +170,16 @@ MX6SL_PAD_KEY_COL2__GPIO3_IO28 0x1b8b1 /* ricoh619 bat_l
>;
};
+ pinctrl_tps65185_gpio: tps65185-gpio-grp {
+ fsl,pins = <
+ MX6SL_PAD_EPDC_VCOM0__GPIO2_IO03 0x40010059 /* vcom_ctrl */
+ MX6SL_PAD_EPDC_PWRCTRL0__GPIO2_IO07 0x40010059 /* wakeup */
+ MX6SL_PAD_EPDC_PWRCTRL1__GPIO2_IO08 0x40010059 /* enable */
+ MX6SL_PAD_EPDC_PWRCTRL2__GPIO2_IO09 0x17059 /* nINT */
+ MX6SL_PAD_EPDC_PWRSTAT__GPIO2_IO13 0x17059 /* pwr-good */
+ >;
+ };
+
pinctrl_uart1: uart1grp {
fsl,pins = <
MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x1b0b1
@@ -308,6 +329,11 @@ &ricoh619 {
pinctrl-0 = <&pinctrl_ricoh_gpio>;
};
+&tps65185 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_tps65185_gpio>;
+};
+
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart1>;
diff --git a/arch/arm/boot/dts/nxp/imx/imx6sll-kobo-clarahd.dts b/arch/arm/boot/dts/nxp/imx/imx6sll-kobo-clarahd.dts
index 18c9ac8f7560..1000ee8b807a 100644
--- a/arch/arm/boot/dts/nxp/imx/imx6sll-kobo-clarahd.dts
+++ b/arch/arm/boot/dts/nxp/imx/imx6sll-kobo-clarahd.dts
@@ -36,6 +36,11 @@ &cpu0 {
soc-supply = <&dcdc1_reg>;
};
+&epd_pmic_supply {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_epd_pmic_supply>;
+};
+
&gpio_keys {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio_keys>;
@@ -69,6 +74,12 @@ MX6SLL_PAD_SD1_DATA2__GPIO5_IO13 0x10059 /* TP_RST */
>;
};
+ pinctrl_epd_pmic_supply: epdc-pmic-supplygrp {
+ fsl,pins = <
+ MX6SLL_PAD_EPDC_PWR_WAKE__GPIO2_IO14 0x40010059
+ >;
+ };
+
pinctrl_gpio_keys: gpio-keysgrp {
fsl,pins = <
MX6SLL_PAD_SD1_DATA1__GPIO5_IO08 0x17059 /* PWR_SW */
@@ -169,6 +180,16 @@ MX6SLL_PAD_KEY_COL2__GPIO3_IO28 0x1b8b1 /* ricoh619 bat_low_int */
>;
};
+ pinctrl_tps65185_gpio: tps65185-gpio-grp {
+ fsl,pins = <
+ MX6SLL_PAD_EPDC_VCOM0__GPIO2_IO03 0x40010059 /* vcom_ctrl */
+ MX6SLL_PAD_EPDC_PWR_CTRL0__GPIO2_IO07 0x40010059 /* wakeup */
+ MX6SLL_PAD_EPDC_PWR_CTRL1__GPIO2_IO08 0x40010059 /* enable */
+ MX6SLL_PAD_EPDC_PWR_CTRL2__GPIO2_IO09 0x17059 /* nINT */
+ MX6SLL_PAD_EPDC_PWR_STAT__GPIO2_IO13 0x17059 /* pwr-good */
+ >;
+ };
+
pinctrl_uart1: uart1grp {
fsl,pins = <
MX6SLL_PAD_UART1_TXD__UART1_DCE_TX 0x1b0b1
@@ -310,6 +331,11 @@ &ricoh619 {
pinctrl-0 = <&pinctrl_ricoh_gpio>;
};
+&tps65185 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_tps65185_gpio>;
+};
+
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart1>;
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders
2026-01-13 15:31 [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders Andreas Kemnade
` (2 preceding siblings ...)
2026-01-13 15:31 ` [PATCH 3/3] ARM: dts: imx: e60k02: add tps65185 Andreas Kemnade
@ 2026-01-18 2:11 ` Shawn Guo
3 siblings, 0 replies; 5+ messages in thread
From: Shawn Guo @ 2026-01-18 2:11 UTC (permalink / raw)
To: Andreas Kemnade
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, devicetree, imx,
linux-arm-kernel, linux-kernel, Josua Mayer
On Tue, Jan 13, 2026 at 04:31:33PM +0100, Andreas Kemnade wrote:
> As the driver is now upstream, wire it up for various ebook readers
> containing imx6sl/6sll/50 SoCs.
>
> The driver for the EPD itself (not included) still needs polishing
> which would be the consumer for these regulators.
>
> Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
> ---
> Andreas Kemnade (2):
> ARM: dts: imx: tolino-shine2: add tps65185
> ARM: dts: imx: e60k02: add tps65185
>
> Josua Mayer (1):
> ARM: dts: imx50-kobo-aura: add epd pmic description
Applied all, thanks!
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-01-18 2:12 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-13 15:31 [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders Andreas Kemnade
2026-01-13 15:31 ` [PATCH 1/3] ARM: dts: imx: tolino-shine2: add tps65185 Andreas Kemnade
2026-01-13 15:31 ` [PATCH 2/3] ARM: dts: imx50-kobo-aura: add epd pmic description Andreas Kemnade
2026-01-13 15:31 ` [PATCH 3/3] ARM: dts: imx: e60k02: add tps65185 Andreas Kemnade
2026-01-18 2:11 ` [PATCH 0/3] ARM: dts: imx: wire up the TPS65185 for various ereaders Shawn Guo
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.