I am using a Digi ConnectCore 8M Nano SoM on a carrier board that has the SN65DSI86 MIPI-DSI-to-eDP bridge.
I used the reference bindings example which can be found here:
https://www.kernel.org/doc/Documentation/devicetree/bindings/display/bridge/ti%2Csn65dsi86.txt
I am compiling in the ti-sn65dsi86 kernel driver which is part of the mainline Linux kernel; specifically, I am using a Digi specific fork of the Linux kernel that contains this driver which can be found here:
https://github.com/digi-embedded/linux/blob/v5.4/dey-3.2/maint/drivers/gpu/drm/bridge/ti-sn65dsi86.c
I am getting the following error:

the following is a snippet of the regulator property definitions inside of my bridge node in my device tree:
vcca-supply = <®_1v2_ext>; vcc-supply = <®_1v2_ext>; vccio-supply = <®_1v8_ext>; vpll-supply = <®_1v8_ext>;
Here's a snippet of my regulator definitions for those particular regulators (a brief note: the "regulators" contains other regulators that I did not provide within the snippet, hence 1v2 starting @8 and 1v8 starting @2):
regulators {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
...
reg_1v8_ext: regulator@2 {
compatible = "regulator-fixed";
reg = <2>;
regulator-name = "1v8_ext";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
gpio = <&mca_gpio 14 GPIO_ACTIVE_HIGH>;
enable-active-high;
regulator-always-on;
regulator-boot-on;
};
...
reg_1v2_ext: regulator@8 {
compatible = "regulator-fixed";
reg = <8>;
regulator-name = "1v2_ext";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
regulator-boot-on;
};
};As a note, the 1v2 and 1v8 come from an on-board, always on, LDO.
I'm wondering why I'm seeing this error. Taking a closer look at the driver at ti-sn65dsi86.c Line 747, we see the error gets thrown when calling ti_sn_bridge_parse_regulators() ret = ti_sn_bridge_parse_regulators(pdata);
if (ret) {
DRM_ERROR("failed to parse regulators\n");
return ret;
}
Looking at what this function does, we take a peak inside ti_sn_bridge_parse_regulators():static int ti_sn_bridge_parse_regulators(struct ti_sn_bridge *pdata)
{
unsigned int i;
const char * const ti_sn_bridge_supply_names[] = {
"vcca", "vcc", "vccio", "vpll",
};
for (i = 0; i < SN_REGULATOR_SUPPLY_NUM; i++)
pdata->supplies[i].supply = ti_sn_bridge_supply_names[i];
return devm_regulator_bulk_get(pdata->dev, SN_REGULATOR_SUPPLY_NUM,
pdata->supplies);
}
Nothing to exotic there -- I see we are simply getting the regulator properties via regulator_bulk_data() which is called within devm_regulator_bulk_get()
So I'm wondering what I'm missing here -- consequently, since this fails, the dsi binding fails as well and as a result, I see nothing on my display:
As an additional note, I have already verified that the bridge itself and the hardware & schematic are correct. I was able to use the Excel SN65DSI86 Register Calculator and I was able to program the bridge via Aardvark to generate a color bar test pattern. The Display successfully turned on and showed the test pattern.
Thank you!