On 08/07/2022 21:43, Konrad Dybcio wrote: > > > On 8.07.2022 13:12, Joel Selvaraj wrote: >> There are two variants of Xiaomi Poco F1. >> - Tianma variant with NOVATEK NT36672A panel + touchscreen manufactured >> by Tianma >> - EBBG variant with Focaltech FT8719 panel + touchscreen manufactured >> by EBBG >> >> The current sdm845-xiaomi-beryllium.dts represents tianma panel variant. >> >> To add support for the EBBG variant, let's split this into 3 files, >> - sdm845-xiaomi-beryllium-common.dtsi which contains all the common nodes >> - sdm845-xiaomi-beryllium-tianma.dts for the tianma variant >> - sdm845-xiaomi-beryllium-ebbg.dts for the ebbg variant >> >> Note: >> ----- >> Both the panels are already upstreamed and the split is based on them. >> There were patches earlier for both the touchscreens, but they are not >> accepted upstream yet. Once they are accepted, we will add them to >> respective variants. > Hi, > > I believe this is not the correct approach. This may work short-term, but > you will have to prepare 2 separate images for the device and mistaking them > may cause irreversible hw damage at worst, or lots of user complaining at best. > Instead, I think it's about time we should look into implementing dynamic panel > detection. > > Qualcomm devices do this by parsing the command line [1], as LK/XBL > gives you a nice-ish string to work with that you can simply match > against a label. Other vendors may use custom mechanisms, such as > a resistor / GPIO to determine which panel (or generally hw config), > but implementing this mechanism would make upstreaming of lots of other > devices easier.. Regarding dynamic panel detection. A mechanism for choosing DT nodes based on some generic (read: extensible) matching feature would be pretty neat.... e.g. matching cmdline: panel { compatible = "some,w3ird-panel"; /* Only attempt to probe a driver for this node if cmdline contains * this string. How this is described and the type(s) of matching to * use could be defined. */ match-if-cmdline = "msm_drm.dsi_display0=some_w3ird-panel"; }; or perhaps GPIO state: panel { compatible = "some,w3ird-panel"; /* Only attempt to probe a driver for this node if GPIO 43 on tlmm is high, * and GPIO 44 is low. */ match-if-gpios = <&tlmm 43 GPIO_ACTIVE_HIGH>, <&tlmm 44 GPIO_ACTIVE_LOW>; }; This certainly introduces the temptation to do awful things... > > This issue concerns many phones (and well, devices in general), as > they are seldom made with only one configuration due to supply chain > strategies. It would be really nice to solve this in-kernel, chainloading a bootloader sometimes kinda sucks. > > > Konrad > > [1] https://github.com/LineageOS/android_kernel_xiaomi_sdm845/blob/lineage-19.1/drivers/gpu/drm/msm/dsi-staging/dsi_display.c -- Kind Regards, Caleb