* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox