* [PATCH v4 0/3] Apple DWI backlight driver
@ 2024-12-11 11:34 Nick Chan
2024-12-11 11:34 ` [PATCH v4 1/3] dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight Nick Chan
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Nick Chan @ 2024-12-11 11:34 UTC (permalink / raw)
To: Lee Jones, Daniel Thompson, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, Nick Chan, dri-devel, linux-leds,
devicetree, linux-kernel, linux-fbdev, asahi, linux-arm-kernel
Apple SoCs come with a 2-wire interface named DWI. On some iPhones, iPads
and iPod touches the backlight controller is connected via this interface.
This series adds a backlight driver for backlight controllers connected
this way.
Changes since v3:
- $ref to common.yaml in bindings
- (and then additionalProperties is changed to unevaluatedProperties)
- Use hex everywhere in bindings example
- Use sizeof(*dwi_bl) instead of the type of the struct when doing
devm_kzalloc()
- Use devm_platform_get_and_ioremap_resource() in driver
- Fix sorting in drivers/video/backlight/Makefile
- In drivers/video/backlight/Kconfig, move config to right after
BACKLIGHT_APPLE
- Explain this driver being completely different from apple_bl
v3: https://lore.kernel.org/asahi/20241209075908.140014-1-towinchenmi@gmail.com/T
Changes since v2:
- Add missing includes in driver
- Fix file path in MAINTAINERS
v2: https://lore.kernel.org/asahi/20241207130433.30351-1-towinchenmi@gmail.com/T
Changes since v1:
- Fixed dt-bindings $id.
- Make power-domains an optional property in dt-bindings.
- Added missing error checking after devm_ioremap_resource() in
dwi_bl_probe().
v1: https://lore.kernel.org/asahi/20241206172735.4310-1-towinchenmi@gmail.com/T
Nick Chan
---
Nick Chan (3):
dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight
backlight: dwi_bl: Add Apple DWI backlight driver
MAINTAINERS: Add entries for Apple DWI backlight controller
.../bindings/leds/backlight/apple,dwi-bl.yaml | 57 ++++++++
MAINTAINERS | 2 +
drivers/video/backlight/Kconfig | 12 ++
drivers/video/backlight/Makefile | 1 +
drivers/video/backlight/dwi_bl.c | 122 ++++++++++++++++++
5 files changed, 194 insertions(+)
create mode 100644 Documentation/devicetree/bindings/leds/backlight/apple,dwi-bl.yaml
create mode 100644 drivers/video/backlight/dwi_bl.c
base-commit: fac04efc5c793dccbd07e2d59af9f90b7fc0dca4
--
2.47.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4 1/3] dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight
2024-12-11 11:34 [PATCH v4 0/3] Apple DWI backlight driver Nick Chan
@ 2024-12-11 11:34 ` Nick Chan
2024-12-12 8:13 ` Krzysztof Kozlowski
2025-01-08 10:41 ` Daniel Thompson
2024-12-11 11:34 ` [PATCH v4 2/3] backlight: dwi_bl: Add Apple DWI backlight driver Nick Chan
2024-12-11 11:34 ` [PATCH v4 3/3] MAINTAINERS: Add entries for Apple DWI backlight controller Nick Chan
2 siblings, 2 replies; 10+ messages in thread
From: Nick Chan @ 2024-12-11 11:34 UTC (permalink / raw)
To: Lee Jones, Daniel Thompson, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, Nick Chan, dri-devel, linux-leds,
devicetree, linux-kernel, linux-fbdev, asahi, linux-arm-kernel
Add backlight controllers attached via Apple DWI 2-wire interface.
Signed-off-by: Nick Chan <towinchenmi@gmail.com>
---
.../bindings/leds/backlight/apple,dwi-bl.yaml | 57 +++++++++++++++++++
1 file changed, 57 insertions(+)
create mode 100644 Documentation/devicetree/bindings/leds/backlight/apple,dwi-bl.yaml
diff --git a/Documentation/devicetree/bindings/leds/backlight/apple,dwi-bl.yaml b/Documentation/devicetree/bindings/leds/backlight/apple,dwi-bl.yaml
new file mode 100644
index 000000000000..29caeb356e6f
--- /dev/null
+++ b/Documentation/devicetree/bindings/leds/backlight/apple,dwi-bl.yaml
@@ -0,0 +1,57 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/leds/backlight/apple,dwi-bl.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Apple DWI 2-Wire Interface Backlight Controller
+
+maintainers:
+ - Nick Chan <towinchenmi@gmail.com>
+
+description:
+ Apple SoCs contain a 2-wire interface called DWI. On some Apple iPhones,
+ iPads and iPod touches with a LCD display, 1-2 backlight controllers
+ are connected via DWI. Interfacing with DWI controls all backlight
+ controllers at the same time. As such, the backlight controllers are
+ treated as a single controller regardless of the underlying
+ configuration.
+
+allOf:
+ - $ref: common.yaml#
+
+properties:
+ compatible:
+ items:
+ - enum:
+ - apple,s5l8960x-dwi-bl
+ - apple,t7000-dwi-bl
+ - apple,s8000-dwi-bl
+ - apple,t8010-dwi-bl
+ - apple,t8015-dwi-bl
+ - const: apple,dwi-bl
+
+ reg:
+ maxItems: 1
+
+ power-domains:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ soc {
+ #address-cells = <2>;
+ #size-cells = <2>;
+
+ dwi_bl: backlight@20e200010 {
+ compatible = "apple,s5l8960x-dwi-bl", "apple,dwi-bl";
+ reg = <0x2 0x0e200010 0x0 0x8>;
+ power-domains = <&ps_dwi>;
+ };
+ };
--
2.47.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 2/3] backlight: dwi_bl: Add Apple DWI backlight driver
2024-12-11 11:34 [PATCH v4 0/3] Apple DWI backlight driver Nick Chan
2024-12-11 11:34 ` [PATCH v4 1/3] dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight Nick Chan
@ 2024-12-11 11:34 ` Nick Chan
2025-01-08 10:52 ` Daniel Thompson
2024-12-11 11:34 ` [PATCH v4 3/3] MAINTAINERS: Add entries for Apple DWI backlight controller Nick Chan
2 siblings, 1 reply; 10+ messages in thread
From: Nick Chan @ 2024-12-11 11:34 UTC (permalink / raw)
To: Lee Jones, Daniel Thompson, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, Nick Chan, dri-devel, linux-leds,
devicetree, linux-kernel, linux-fbdev, asahi, linux-arm-kernel
Add driver for backlight controllers attached via Apple DWI 2-wire
interface, which is found on some Apple iPhones, iPads and iPod touches
with a LCD display.
Although there is an existing apple_bl driver, it is for backlight
controllers on Intel Macs attached via PCI, which is completely different
from the Samsung-derived DWI block.
Signed-off-by: Nick Chan <towinchenmi@gmail.com>
---
drivers/video/backlight/Kconfig | 12 +++
drivers/video/backlight/Makefile | 1 +
drivers/video/backlight/dwi_bl.c | 122 +++++++++++++++++++++++++++++++
3 files changed, 135 insertions(+)
create mode 100644 drivers/video/backlight/dwi_bl.c
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index 3614a5d29c71..debb1326df63 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -290,6 +290,18 @@ config BACKLIGHT_APPLE
If you have an Intel-based Apple say Y to enable a driver for its
backlight.
+config BACKLIGHT_APPLE_DWI
+ tristate "Apple DWI 2-Wire Interface Backlight Driver"
+ depends on ARCH_APPLE || COMPILE_TEST
+ default y
+ help
+ Say Y to enable the backlight driver for backlight controllers
+ attached via the Apple DWI 2-wire interface which is found in some
+ Apple iPhones, iPads and iPod touches.
+
+ To compile this driver as a module, choose M here: the module will
+ be called dwi_bl.
+
config BACKLIGHT_QCOM_WLED
tristate "Qualcomm PMIC WLED Driver"
select REGMAP
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index 8fc98f760a8a..45cc80d9ae22 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -23,6 +23,7 @@ obj-$(CONFIG_BACKLIGHT_ADP5520) += adp5520_bl.o
obj-$(CONFIG_BACKLIGHT_ADP8860) += adp8860_bl.o
obj-$(CONFIG_BACKLIGHT_ADP8870) += adp8870_bl.o
obj-$(CONFIG_BACKLIGHT_APPLE) += apple_bl.o
+obj-$(CONFIG_BACKLIGHT_APPLE_DWI) += dwi_bl.o
obj-$(CONFIG_BACKLIGHT_AS3711) += as3711_bl.o
obj-$(CONFIG_BACKLIGHT_BD6107) += bd6107.o
obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o
diff --git a/drivers/video/backlight/dwi_bl.c b/drivers/video/backlight/dwi_bl.c
new file mode 100644
index 000000000000..59e5cad0fbd8
--- /dev/null
+++ b/drivers/video/backlight/dwi_bl.c
@@ -0,0 +1,122 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Driver for backlight controllers attached via Apple DWI 2-wire interface
+ *
+ * Copyright (c) 2024 Nick Chan <towinchenmi@gmail.com>
+ */
+
+#include <linux/backlight.h>
+#include <linux/bitfield.h>
+#include <linux/device.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#define DWI_BL_CTL 0x0
+#define DWI_BL_CTL_SEND1 BIT(0)
+#define DWI_BL_CTL_SEND2 BIT(4)
+#define DWI_BL_CTL_SEND3 BIT(5)
+#define DWI_BL_CTL_LE_DATA BIT(6)
+/* Only used on Apple A9 and later */
+#define DWI_BL_CTL_SEND4 BIT(12)
+
+#define DWI_BL_CMD 0x4
+#define DWI_BL_CMD_TYPE GENMASK(31, 28)
+#define DWI_BL_CMD_TYPE_SET_BRIGHTNESS 0xa
+#define DWI_BL_CMD_DATA GENMASK(10, 0)
+
+#define DWI_BL_CTL_SEND (DWI_BL_CTL_SEND1 | \
+ DWI_BL_CTL_SEND2 | \
+ DWI_BL_CTL_SEND3 | \
+ DWI_BL_CTL_LE_DATA | \
+ DWI_BL_CTL_SEND4)
+
+#define DWI_BL_MAX_BRIGHTNESS 2047
+
+struct apple_dwi_bl {
+ void __iomem *base;
+};
+
+static int dwi_bl_update_status(struct backlight_device *bl)
+{
+ struct apple_dwi_bl *dwi_bl = bl_get_data(bl);
+
+ int brightness = backlight_get_brightness(bl);
+
+ u32 cmd = 0;
+
+ cmd |= FIELD_PREP(DWI_BL_CMD_DATA, brightness);
+ cmd |= FIELD_PREP(DWI_BL_CMD_TYPE, DWI_BL_CMD_TYPE_SET_BRIGHTNESS);
+
+ writel(cmd, dwi_bl->base + DWI_BL_CMD);
+ writel(DWI_BL_CTL_SEND, dwi_bl->base + DWI_BL_CTL);
+
+ return 0;
+}
+
+static int dwi_bl_get_brightness(struct backlight_device *bl)
+{
+ struct apple_dwi_bl *dwi_bl = bl_get_data(bl);
+
+ u32 cmd = readl(dwi_bl->base + DWI_BL_CMD);
+
+ return FIELD_GET(DWI_BL_CMD_DATA, cmd);
+}
+
+static const struct backlight_ops dwi_bl_ops = {
+ .options = BL_CORE_SUSPENDRESUME,
+ .get_brightness = dwi_bl_get_brightness,
+ .update_status = dwi_bl_update_status
+};
+
+static int dwi_bl_probe(struct platform_device *dev)
+{
+ struct apple_dwi_bl *dwi_bl;
+ struct backlight_device *bl;
+ struct backlight_properties props;
+ struct resource *res;
+
+ dwi_bl = devm_kzalloc(&dev->dev, sizeof(*dwi_bl), GFP_KERNEL);
+ if (!dwi_bl)
+ return -ENOMEM;
+
+ dwi_bl->base = devm_platform_get_and_ioremap_resource(dev, 0, &res);
+ if (IS_ERR(dwi_bl->base))
+ return PTR_ERR(dwi_bl->base);
+
+ memset(&props, 0, sizeof(struct backlight_properties));
+ props.type = BACKLIGHT_RAW;
+ props.max_brightness = DWI_BL_MAX_BRIGHTNESS;
+
+ bl = devm_backlight_device_register(&dev->dev, dev->name, &dev->dev,
+ dwi_bl, &dwi_bl_ops, &props);
+ if (IS_ERR(bl))
+ return PTR_ERR(bl);
+
+ platform_set_drvdata(dev, dwi_bl);
+
+ bl->props.brightness = dwi_bl_get_brightness(bl);
+
+ return 0;
+}
+
+static const struct of_device_id dwi_bl_of_match[] = {
+ { .compatible = "apple,dwi-bl" },
+ {},
+};
+
+MODULE_DEVICE_TABLE(of, dwi_bl_of_match);
+
+static struct platform_driver dwi_bl_driver = {
+ .driver = {
+ .name = "dwi-bl",
+ .of_match_table = dwi_bl_of_match
+ },
+ .probe = dwi_bl_probe,
+};
+
+module_platform_driver(dwi_bl_driver);
+
+MODULE_DESCRIPTION("Apple DWI Backlight Driver");
+MODULE_AUTHOR("Nick Chan <towinchenmi@gmail.com>");
+MODULE_LICENSE("Dual MIT/GPL");
--
2.47.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 3/3] MAINTAINERS: Add entries for Apple DWI backlight controller
2024-12-11 11:34 [PATCH v4 0/3] Apple DWI backlight driver Nick Chan
2024-12-11 11:34 ` [PATCH v4 1/3] dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight Nick Chan
2024-12-11 11:34 ` [PATCH v4 2/3] backlight: dwi_bl: Add Apple DWI backlight driver Nick Chan
@ 2024-12-11 11:34 ` Nick Chan
2025-01-08 10:53 ` Daniel Thompson
2 siblings, 1 reply; 10+ messages in thread
From: Nick Chan @ 2024-12-11 11:34 UTC (permalink / raw)
To: Lee Jones, Daniel Thompson, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, Nick Chan, dri-devel, linux-leds,
devicetree, linux-kernel, linux-fbdev, asahi, linux-arm-kernel
Add MAINTAINERS entries for the driver.
Signed-off-by: Nick Chan <towinchenmi@gmail.com>
---
MAINTAINERS | 2 ++
1 file changed, 2 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index 17daa9ee9384..3a7dec3f9a5a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2196,6 +2196,7 @@ F: Documentation/devicetree/bindings/i2c/apple,i2c.yaml
F: Documentation/devicetree/bindings/interrupt-controller/apple,*
F: Documentation/devicetree/bindings/iommu/apple,dart.yaml
F: Documentation/devicetree/bindings/iommu/apple,sart.yaml
+F: Documentation/devicetree/bindings/leds/backlight/apple,dwi-bl.yaml
F: Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
F: Documentation/devicetree/bindings/net/bluetooth/brcm,bcm4377-bluetooth.yaml
F: Documentation/devicetree/bindings/nvme/apple,nvme-ans.yaml
@@ -2221,6 +2222,7 @@ F: drivers/nvmem/apple-efuses.c
F: drivers/pinctrl/pinctrl-apple-gpio.c
F: drivers/pwm/pwm-apple.c
F: drivers/soc/apple/*
+F: drivers/video/backlight/dwi_bl.c
F: drivers/watchdog/apple_wdt.c
F: include/dt-bindings/interrupt-controller/apple-aic.h
F: include/dt-bindings/pinctrl/apple.h
--
2.47.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v4 1/3] dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight
2024-12-11 11:34 ` [PATCH v4 1/3] dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight Nick Chan
@ 2024-12-12 8:13 ` Krzysztof Kozlowski
2025-01-08 10:41 ` Daniel Thompson
1 sibling, 0 replies; 10+ messages in thread
From: Krzysztof Kozlowski @ 2024-12-12 8:13 UTC (permalink / raw)
To: Nick Chan
Cc: Lee Jones, Daniel Thompson, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, dri-devel, linux-leds, devicetree,
linux-kernel, linux-fbdev, asahi, linux-arm-kernel
On Wed, Dec 11, 2024 at 07:34:37PM +0800, Nick Chan wrote:
> Add backlight controllers attached via Apple DWI 2-wire interface.
>
> Signed-off-by: Nick Chan <towinchenmi@gmail.com>
> ---
> .../bindings/leds/backlight/apple,dwi-bl.yaml | 57 +++++++++++++++++++
> 1 file changed, 57 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/leds/backlight/apple,dwi-bl.yaml
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 1/3] dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight
2024-12-11 11:34 ` [PATCH v4 1/3] dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight Nick Chan
2024-12-12 8:13 ` Krzysztof Kozlowski
@ 2025-01-08 10:41 ` Daniel Thompson
1 sibling, 0 replies; 10+ messages in thread
From: Daniel Thompson @ 2025-01-08 10:41 UTC (permalink / raw)
To: Nick Chan
Cc: Lee Jones, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, dri-devel, linux-leds, devicetree,
linux-kernel, linux-fbdev, asahi, linux-arm-kernel
On Wed, Dec 11, 2024 at 07:34:37PM +0800, Nick Chan wrote:
> Add backlight controllers attached via Apple DWI 2-wire interface.
>
> Signed-off-by: Nick Chan <towinchenmi@gmail.com>
Reviewed-by: Daniel Thompson (RISCstar) <danielt@kernel.org>
Daniel.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/3] backlight: dwi_bl: Add Apple DWI backlight driver
2024-12-11 11:34 ` [PATCH v4 2/3] backlight: dwi_bl: Add Apple DWI backlight driver Nick Chan
@ 2025-01-08 10:52 ` Daniel Thompson
2025-01-09 15:52 ` Nick Chan
0 siblings, 1 reply; 10+ messages in thread
From: Daniel Thompson @ 2025-01-08 10:52 UTC (permalink / raw)
To: Nick Chan
Cc: Lee Jones, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, dri-devel, linux-leds, devicetree,
linux-kernel, linux-fbdev, asahi, linux-arm-kernel
On Wed, Dec 11, 2024 at 07:34:38PM +0800, Nick Chan wrote:
> Add driver for backlight controllers attached via Apple DWI 2-wire
> interface, which is found on some Apple iPhones, iPads and iPod touches
> with a LCD display.
>
> Although there is an existing apple_bl driver, it is for backlight
> controllers on Intel Macs attached via PCI, which is completely different
> from the Samsung-derived DWI block.
>
> Signed-off-by: Nick Chan <towinchenmi@gmail.com>
> ---
> drivers/video/backlight/Kconfig | 12 +++
> drivers/video/backlight/Makefile | 1 +
> drivers/video/backlight/dwi_bl.c | 122 +++++++++++++++++++++++++++++++
I'd rather this was called apple_dwi_bl.c to match that config options,
etc.
> diff --git a/drivers/video/backlight/dwi_bl.c b/drivers/video/backlight/dwi_bl.c
> new file mode 100644
> index 000000000000..59e5cad0fbd8
> --- /dev/null
> +++ b/drivers/video/backlight/dwi_bl.c
> @@ -0,0 +1,122 @@
> +// SPDX-License-Identifier: GPL-2.0 OR MIT
> +/*
> + * Driver for backlight controllers attached via Apple DWI 2-wire interface
> + *
> + * Copyright (c) 2024 Nick Chan <towinchenmi@gmail.com>
> + */
> +
> +#include <linux/backlight.h>
> +#include <linux/bitfield.h>
> +#include <linux/device.h>
> +#include <linux/io.h>
> +#include <linux/module.h>
> +#include <linux/platform_device.h>
> +
> +#define DWI_BL_CTL 0x0
> +#define DWI_BL_CTL_SEND1 BIT(0)
> +#define DWI_BL_CTL_SEND2 BIT(4)
> +#define DWI_BL_CTL_SEND3 BIT(5)
> +#define DWI_BL_CTL_LE_DATA BIT(6)
> +/* Only used on Apple A9 and later */
> +#define DWI_BL_CTL_SEND4 BIT(12)
> +
> +#define DWI_BL_CMD 0x4
> +#define DWI_BL_CMD_TYPE GENMASK(31, 28)
> +#define DWI_BL_CMD_TYPE_SET_BRIGHTNESS 0xa
> +#define DWI_BL_CMD_DATA GENMASK(10, 0)
> +
> +#define DWI_BL_CTL_SEND (DWI_BL_CTL_SEND1 | \
> + DWI_BL_CTL_SEND2 | \
> + DWI_BL_CTL_SEND3 | \
> + DWI_BL_CTL_LE_DATA | \
> + DWI_BL_CTL_SEND4)
> +
> +#define DWI_BL_MAX_BRIGHTNESS 2047
> +
> +struct apple_dwi_bl {
> + void __iomem *base;
> +};
> +
> +static int dwi_bl_update_status(struct backlight_device *bl)
> +{
> + struct apple_dwi_bl *dwi_bl = bl_get_data(bl);
> +
> + int brightness = backlight_get_brightness(bl);
> +
> + u32 cmd = 0;
> +
> + cmd |= FIELD_PREP(DWI_BL_CMD_DATA, brightness);
> + cmd |= FIELD_PREP(DWI_BL_CMD_TYPE, DWI_BL_CMD_TYPE_SET_BRIGHTNESS);
> +
> + writel(cmd, dwi_bl->base + DWI_BL_CMD);
> + writel(DWI_BL_CTL_SEND, dwi_bl->base + DWI_BL_CTL);
> +
> + return 0;
> +}
> +
> +static int dwi_bl_get_brightness(struct backlight_device *bl)
> +{
> + struct apple_dwi_bl *dwi_bl = bl_get_data(bl);
> +
> + u32 cmd = readl(dwi_bl->base + DWI_BL_CMD);
> +
> + return FIELD_GET(DWI_BL_CMD_DATA, cmd);
> +}
> +
> +static const struct backlight_ops dwi_bl_ops = {
> + .options = BL_CORE_SUSPENDRESUME,
> + .get_brightness = dwi_bl_get_brightness,
> + .update_status = dwi_bl_update_status
> +};
> +
> +static int dwi_bl_probe(struct platform_device *dev)
> +{
> + struct apple_dwi_bl *dwi_bl;
> + struct backlight_device *bl;
> + struct backlight_properties props;
> + struct resource *res;
> +
> + dwi_bl = devm_kzalloc(&dev->dev, sizeof(*dwi_bl), GFP_KERNEL);
> + if (!dwi_bl)
> + return -ENOMEM;
> +
> + dwi_bl->base = devm_platform_get_and_ioremap_resource(dev, 0, &res);
> + if (IS_ERR(dwi_bl->base))
> + return PTR_ERR(dwi_bl->base);
> +
> + memset(&props, 0, sizeof(struct backlight_properties));
> + props.type = BACKLIGHT_RAW;
> + props.max_brightness = DWI_BL_MAX_BRIGHTNESS;
There should be something to indicate whether the backlight controls are
linear or logarithmic here.
> +static struct platform_driver dwi_bl_driver = {
> + .driver = {
> + .name = "dwi-bl",
Again, I'd rather see apple here too (although, to be clear, I'm
perfectly happy with all the static functions and variables being
prefixed only with dwi_bl).
Daniel.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 3/3] MAINTAINERS: Add entries for Apple DWI backlight controller
2024-12-11 11:34 ` [PATCH v4 3/3] MAINTAINERS: Add entries for Apple DWI backlight controller Nick Chan
@ 2025-01-08 10:53 ` Daniel Thompson
0 siblings, 0 replies; 10+ messages in thread
From: Daniel Thompson @ 2025-01-08 10:53 UTC (permalink / raw)
To: Nick Chan
Cc: Lee Jones, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, dri-devel, linux-leds, devicetree,
linux-kernel, linux-fbdev, asahi, linux-arm-kernel
On Wed, Dec 11, 2024 at 07:34:39PM +0800, Nick Chan wrote:
> Add MAINTAINERS entries for the driver.
>
> Signed-off-by: Nick Chan <towinchenmi@gmail.com>
Reviewed-by: Daniel Thompson (RISCstar) <danielt@kernel.org>
(keep this R-b if you rename any files)
Daniel.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/3] backlight: dwi_bl: Add Apple DWI backlight driver
2025-01-08 10:52 ` Daniel Thompson
@ 2025-01-09 15:52 ` Nick Chan
2025-01-09 17:15 ` Daniel Thompson
0 siblings, 1 reply; 10+ messages in thread
From: Nick Chan @ 2025-01-09 15:52 UTC (permalink / raw)
To: Daniel Thompson
Cc: Lee Jones, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, dri-devel, linux-leds, devicetree,
linux-kernel, linux-fbdev, asahi, linux-arm-kernel
Daniel Thompson 於 2025/1/8 下晝6:52 寫道:
> On Wed, Dec 11, 2024 at 07:34:38PM +0800, Nick Chan wrote:
>> Add driver for backlight controllers attached via Apple DWI 2-wire
>> interface, which is found on some Apple iPhones, iPads and iPod touches
>> with a LCD display.
>>
>> Although there is an existing apple_bl driver, it is for backlight
>> controllers on Intel Macs attached via PCI, which is completely different
>> from the Samsung-derived DWI block.
>>
>> Signed-off-by: Nick Chan <towinchenmi@gmail.com>
>> ---
>> drivers/video/backlight/Kconfig | 12 +++
>> drivers/video/backlight/Makefile | 1 +
>> drivers/video/backlight/dwi_bl.c | 122 +++++++++++++++++++++++++++++++
> I'd rather this was called apple_dwi_bl.c to match that config options,
> etc.
Still trying to determine the type of the backlight control, I think it is linear however and I will send a new
version when I am more certain.
>
>> diff --git a/drivers/video/backlight/dwi_bl.c b/drivers/video/backlight/dwi_bl.c
>> new file mode 100644
>> index 000000000000..59e5cad0fbd8
>> --- /dev/null
>> +++ b/drivers/video/backlight/dwi_bl.c
>> @@ -0,0 +1,122 @@
>> +// SPDX-License-Identifier: GPL-2.0 OR MIT
>> +/*
>> + * Driver for backlight controllers attached via Apple DWI 2-wire interface
>> + *
>> + * Copyright (c) 2024 Nick Chan <towinchenmi@gmail.com>
>> + */
>> +
>> +#include <linux/backlight.h>
>> +#include <linux/bitfield.h>
>> +#include <linux/device.h>
>> +#include <linux/io.h>
>> +#include <linux/module.h>
>> +#include <linux/platform_device.h>
>> +
>> +#define DWI_BL_CTL 0x0
>> +#define DWI_BL_CTL_SEND1 BIT(0)
>> +#define DWI_BL_CTL_SEND2 BIT(4)
>> +#define DWI_BL_CTL_SEND3 BIT(5)
>> +#define DWI_BL_CTL_LE_DATA BIT(6)
>> +/* Only used on Apple A9 and later */
>> +#define DWI_BL_CTL_SEND4 BIT(12)
>> +
>> +#define DWI_BL_CMD 0x4
>> +#define DWI_BL_CMD_TYPE GENMASK(31, 28)
>> +#define DWI_BL_CMD_TYPE_SET_BRIGHTNESS 0xa
>> +#define DWI_BL_CMD_DATA GENMASK(10, 0)
>> +
>> +#define DWI_BL_CTL_SEND (DWI_BL_CTL_SEND1 | \
>> + DWI_BL_CTL_SEND2 | \
>> + DWI_BL_CTL_SEND3 | \
>> + DWI_BL_CTL_LE_DATA | \
>> + DWI_BL_CTL_SEND4)
>> +
>> +#define DWI_BL_MAX_BRIGHTNESS 2047
>> +
>> +struct apple_dwi_bl {
>> + void __iomem *base;
>> +};
>> +
>> +static int dwi_bl_update_status(struct backlight_device *bl)
>> +{
>> + struct apple_dwi_bl *dwi_bl = bl_get_data(bl);
>> +
>> + int brightness = backlight_get_brightness(bl);
>> +
>> + u32 cmd = 0;
>> +
>> + cmd |= FIELD_PREP(DWI_BL_CMD_DATA, brightness);
>> + cmd |= FIELD_PREP(DWI_BL_CMD_TYPE, DWI_BL_CMD_TYPE_SET_BRIGHTNESS);
>> +
>> + writel(cmd, dwi_bl->base + DWI_BL_CMD);
>> + writel(DWI_BL_CTL_SEND, dwi_bl->base + DWI_BL_CTL);
>> +
>> + return 0;
>> +}
>> +
>> +static int dwi_bl_get_brightness(struct backlight_device *bl)
>> +{
>> + struct apple_dwi_bl *dwi_bl = bl_get_data(bl);
>> +
>> + u32 cmd = readl(dwi_bl->base + DWI_BL_CMD);
>> +
>> + return FIELD_GET(DWI_BL_CMD_DATA, cmd);
>> +}
>> +
>> +static const struct backlight_ops dwi_bl_ops = {
>> + .options = BL_CORE_SUSPENDRESUME,
>> + .get_brightness = dwi_bl_get_brightness,
>> + .update_status = dwi_bl_update_status
>> +};
>> +
>> +static int dwi_bl_probe(struct platform_device *dev)
>> +{
>> + struct apple_dwi_bl *dwi_bl;
>> + struct backlight_device *bl;
>> + struct backlight_properties props;
>> + struct resource *res;
>> +
>> + dwi_bl = devm_kzalloc(&dev->dev, sizeof(*dwi_bl), GFP_KERNEL);
>> + if (!dwi_bl)
>> + return -ENOMEM;
>> +
>> + dwi_bl->base = devm_platform_get_and_ioremap_resource(dev, 0, &res);
>> + if (IS_ERR(dwi_bl->base))
>> + return PTR_ERR(dwi_bl->base);
>> +
>> + memset(&props, 0, sizeof(struct backlight_properties));
>> + props.type = BACKLIGHT_RAW;
>> + props.max_brightness = DWI_BL_MAX_BRIGHTNESS;
> There should be something to indicate whether the backlight controls are
> linear or logarithmic here.
>
>
>> +static struct platform_driver dwi_bl_driver = {
>> + .driver = {
>> + .name = "dwi-bl",
> Again, I'd rather see apple here too (although, to be clear, I'm
> perfectly happy with all the static functions and variables being
> prefixed only with dwi_bl).
Alright, I will rename the file and and the name of the driver to have apple, the functions
and variables will still not have apple though to not make the lines too long.
>
>
> Daniel.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/3] backlight: dwi_bl: Add Apple DWI backlight driver
2025-01-09 15:52 ` Nick Chan
@ 2025-01-09 17:15 ` Daniel Thompson
0 siblings, 0 replies; 10+ messages in thread
From: Daniel Thompson @ 2025-01-09 17:15 UTC (permalink / raw)
To: Nick Chan
Cc: Lee Jones, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Hector Martin,
Sven Peter, Alyssa Rosenzweig, dri-devel, linux-leds, devicetree,
linux-kernel, linux-fbdev, asahi, linux-arm-kernel
On Thu, Jan 09, 2025 at 11:52:56PM +0800, Nick Chan wrote:
>
> Daniel Thompson 於 2025/1/8 下晝6:52 寫道:
> > On Wed, Dec 11, 2024 at 07:34:38PM +0800, Nick Chan wrote:
> >> Add driver for backlight controllers attached via Apple DWI 2-wire
> >> interface, which is found on some Apple iPhones, iPads and iPod touches
> >> with a LCD display.
> >>
> >> Although there is an existing apple_bl driver, it is for backlight
> >> controllers on Intel Macs attached via PCI, which is completely different
> >> from the Samsung-derived DWI block.
> >>
> >> Signed-off-by: Nick Chan <towinchenmi@gmail.com>
> >> ---
> >> drivers/video/backlight/Kconfig | 12 +++
> >> drivers/video/backlight/Makefile | 1 +
> >> drivers/video/backlight/dwi_bl.c | 122 +++++++++++++++++++++++++++++++
> > I'd rather this was called apple_dwi_bl.c to match that config options,
> > etc.
> Still trying to determine the type of the backlight control, I think
> it is linear however and I will send a new version when I am more
> certain.
If you've got an physicalinstance of the backlight then you can get a
general idea by comparing levels: 512, 1024, 1536 and 2047.
A linear backlight will feel make the gaps feel uneven (e.g. the
difference between 1536 and 2047 will look very different to the
difference difference between 512 and 1024). A logarithmic backligt
will make the perceived brightness intervals between the above all
feel pretty similar.
Daniel.
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-01-09 17:15 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-11 11:34 [PATCH v4 0/3] Apple DWI backlight driver Nick Chan
2024-12-11 11:34 ` [PATCH v4 1/3] dt-bindings: leds: backlight: apple,dwi-bl: Add Apple DWI backlight Nick Chan
2024-12-12 8:13 ` Krzysztof Kozlowski
2025-01-08 10:41 ` Daniel Thompson
2024-12-11 11:34 ` [PATCH v4 2/3] backlight: dwi_bl: Add Apple DWI backlight driver Nick Chan
2025-01-08 10:52 ` Daniel Thompson
2025-01-09 15:52 ` Nick Chan
2025-01-09 17:15 ` Daniel Thompson
2024-12-11 11:34 ` [PATCH v4 3/3] MAINTAINERS: Add entries for Apple DWI backlight controller Nick Chan
2025-01-08 10:53 ` Daniel Thompson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).