Unsubscribe ----------------------------------------------------------------------------------------------------------- IT&C (HK) Ltd. www.itnc.com Tel:+852 6913 0049 PENIT (China) Ltd. www.penit.com : Tel: +86 755 26811370 E-Mail: [email protected] [email protected]
SKYPE: kflee2000 QQ:129929-6015 19A, Seascape Plaza, 18 Taizi Road, Shekou, Shenzhen, PROC. **** ACW: Alternative Class of Webspace 另类网路空间 ***** www.itnc.com - Hong Kong Based HQ www.penit.com - Logistic Software Developer www.jpfree.com - ACW for Japan www.twfree.com - ACW for Taiwan www.cnfree.com - ACW for China www.asiafree.net - Free Business Card Site --------------------------------------------------------------------------------------------- On Fri, 8 Aug 2025, 13:00 , <[email protected]> wrote: > Send Replicant mailing list submissions to > [email protected] > > To subscribe or unsubscribe via the World Wide Web, visit > https://lists.osuosl.org/mailman/listinfo/replicant > or, via email, send a message with subject or body 'help' to > [email protected] > > You can reach the person managing the list at > [email protected] > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Replicant digest..." > > > Today's Topics: > > 1. Re: [PATCH 3/3] drm/bridge: sii9234: use extcon cable > detection logic to detect MHL (Henrik Grimler) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Fri, 8 Aug 2025 09:39:34 +0200 > From: Henrik Grimler <[email protected]> > To: Marek Szyprowski <[email protected]> > Cc: Andrzej Hajda <[email protected]>, Neil Armstrong > <[email protected]>, Robert Foss <[email protected]>, > Laurent > Pinchart <[email protected]>, Jonas Karlman > <[email protected]>, Jernej Skrabec <[email protected]>, > Maarten > Lankhorst <[email protected]>, Maxime Ripard > <[email protected]>, Thomas Zimmermann <[email protected]>, > David > Airlie <[email protected]>, Simona Vetter <[email protected]>, > [email protected], [email protected] > , > ~postmarketos/[email protected], [email protected], > [email protected] > Subject: Re: [Replicant] [PATCH 3/3] drm/bridge: sii9234: use extcon > cable detection logic to detect MHL > Message-ID: <[email protected]> > Content-Type: text/plain; charset=us-ascii > > Hi Marek, > > On Fri, Aug 01, 2025 at 10:09:08AM +0200, Marek Szyprowski wrote: > > On 21.07.2025 11:43, Henrik Grimler wrote: > > > To use MHL we currently need the MHL chip to be permanently on, which > > > consumes unnecessary power. Let's use extcon attached to MUIC to enable > > > the MHL chip only if it detects an MHL cable. > > > > > > Signed-off-by: Henrik Grimler <[email protected]> > > > --- > > > > Thanks! > > > > Acked-by: Marek Szyprowski <[email protected]> > > Tested-by: Marek Szyprowski <[email protected]> > > Thanks for testing! On trats2 I assume? After some more testing I > noticed that mhl hotplugging only works reliably if device screen is > on when cable is plugged in, otherwise I get errors like: > > [ 281.203520] exynos-hdmi 12d00000.hdmi: [drm:hdmiphy_enable.part.0] > *ERROR* PLL could not reach steady state > [ 281.313816] exynos-mixer 12c10000.mixer: timeout waiting for VSYNC > [ 281.420637] ------------[ cut here ]------------ > [ 281.423861] WARNING: CPU: 3 PID: 1189 at > drivers/gpu/drm/drm_atomic_helper.c:1720 > drm_atomic_helper_wait_for_vblanks.part.0+0x264/0x26c > [ 281.436172] [CRTC:71:crtc-1] vblank wait timed out > [ 281.440870] Modules linked in: cpufreq_conservative rfcomm aes_arm > aes_generic nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 cmac nft_reject > algif_hash algif_skcipher nft_ct nf_conntrack af_alg nf_defrag_ipv6 > nf_defrag_ipv4 bnep nf_tables ntc_thermistor hwmon brcmfmac_wcc s5k6a3 > st_accel_spi spi_s3c64xx st_gyro_spi hci_uart st_sensors_spi btbcm btintel > pwm_samsung bluetooth st_gyro_i2c st_accel_i2c st_gyro st_sensors_i2c > st_accel st_sensors brcmfmac ecdh_generic ecc s5c73m3 libaes lima cfg80211 > drm_shmem_helper gpu_sched exynos_adc brcmutil rfkill panel_samsung_s6e8aa0 > s5p_sss exynos_rng s5p_g2d tm2_touchkey leds_an30259a cm36651 leds_aat1290 > led_class_flash led_class ak8975 industrialio_triggered_buffer kfifo_buf > gpio_keys uhid hid uinput ledtrig_pattern zram zsmalloc fuse loop nfnetlink > ipv6 evdev [last unloaded: cpufreq_conservative] > [ 281.514974] CPU: 3 UID: 10000 PID: 1189 Comm: phoc Tainted: G W > 6.16.0-postmarketos-exynos4 #38 PREEMPT > [ 281.515007] Tainted: [W]=WARN > [ 281.515013] Hardware name: Samsung Exynos (Flattened Device Tree) > [ 281.515027] Call trace: > [ 281.515062] unwind_backtrace from show_stack+0x18/0x1c > [ 281.515155] show_stack from dump_stack_lvl+0x50/0x64 > [ 281.515219] dump_stack_lvl from __warn+0x88/0x15c > [ 281.515271] __warn from warn_slowpath_fmt+0x118/0x1ac > [ 281.515285] warn_slowpath_fmt from > drm_atomic_helper_wait_for_vblanks.part.0+0x264/0x26c > [ 281.515340] drm_atomic_helper_wait_for_vblanks.part.0 from > drm_atomic_helper_commit_tail_rpm+0x84/0x94 > [ 281.515363] drm_atomic_helper_commit_tail_rpm from > commit_tail+0xa8/0x1a0 > [ 281.515385] commit_tail from drm_atomic_helper_commit+0x164/0x19c > [ 281.515402] drm_atomic_helper_commit from drm_atomic_commit+0xd0/0x104 > [ 281.515489] drm_atomic_commit from drm_mode_atomic_ioctl+0x9f8/0xd14 > [ 281.515512] drm_mode_atomic_ioctl from drm_ioctl+0x20c/0x4cc > [ 281.515562] drm_ioctl from sys_ioctl+0x5a8/0xc10 > [ 281.515634] sys_ioctl from ret_fast_syscall+0x0/0x54 > [ 281.515651] Exception stack(0xc5d05fa8 to 0xc5d05ff0) > [ 281.515665] 5fa0: beb4be88 beb4be88 0000000d c03864bc > beb4be88 0000000d > [ 281.515675] 5fc0: beb4be88 beb4be88 c03864bc 00000036 acbe4450 ad8edc70 > acbe4490 acd46cf0 > [ 281.515682] 5fe0: beb4be58 beb4bd38 b6e5651f b6ebb040 > [ 281.515693] ---[ end trace 0000000000000000 ]--- > > or device just hangs. I suppose this might not be an issue in the > sii9234 driver though, so will collect your tags (unless I do further > changes)! > > > You should also add "select EXTCON" (like in case of Sii8620) to Kconfig > > to avoid potential build break if extcon support is built as a module. > > Kernel robot also reported this issue, so I have added the select in > v2: > > https://lore.kernel.org/linux-samsung-soc/[email protected]/ > > Best regards, > Henrik Grimler > > > > > > drivers/gpu/drm/bridge/sii9234.c | 89 > ++++++++++++++++++++++++++++++++++++++-- > > > 1 file changed, 86 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/bridge/sii9234.c > b/drivers/gpu/drm/bridge/sii9234.c > > > index > 0e0bb1bf71fdcef788715cfd6fa158a6992def33..4d84ba01ea76816bebdbc29d48a041c9c6cd508e > 100644 > > > --- a/drivers/gpu/drm/bridge/sii9234.c > > > +++ b/drivers/gpu/drm/bridge/sii9234.c > > > @@ -19,6 +19,7 @@ > > > > > > #include <linux/delay.h> > > > #include <linux/err.h> > > > +#include <linux/extcon.h> > > > #include <linux/gpio/consumer.h> > > > #include <linux/i2c.h> > > > #include <linux/interrupt.h> > > > @@ -26,6 +27,7 @@ > > > #include <linux/kernel.h> > > > #include <linux/module.h> > > > #include <linux/mutex.h> > > > +#include <linux/of_graph.h> > > > #include <linux/regulator/consumer.h> > > > #include <linux/slab.h> > > > > > > @@ -170,8 +172,12 @@ struct sii9234 { > > > struct drm_bridge bridge; > > > struct device *dev; > > > struct gpio_desc *gpio_reset; > > > - int i2c_error; > > > struct regulator_bulk_data supplies[4]; > > > + struct extcon_dev *extcon; > > > + struct notifier_block extcon_nb; > > > + struct work_struct extcon_wq; > > > + int cable_state; > > > + int i2c_error; > > > > > > struct mutex lock; /* Protects fields below and device registers */ > > > enum sii9234_state state; > > > @@ -864,6 +870,70 @@ static int sii9234_init_resources(struct sii9234 > *ctx, > > > return 0; > > > } > > > > > > +static void sii9234_extcon_work(struct work_struct *work) > > > +{ > > > + struct sii9234 *ctx = > > > + container_of(work, struct sii9234, extcon_wq); > > > + int state = extcon_get_state(ctx->extcon, EXTCON_DISP_MHL); > > > + > > > + if (state == ctx->cable_state) > > > + return; > > > + > > > + ctx->cable_state = state; > > > + > > > + if (state > 0) > > > + sii9234_cable_in(ctx); > > > + else > > > + sii9234_cable_out(ctx); > > > +} > > > + > > > +static int sii9234_extcon_notifier(struct notifier_block *self, > > > + unsigned long event, void *ptr) > > > +{ > > > + struct sii9234 *ctx = > > > + container_of(self, struct sii9234, extcon_nb); > > > + > > > + schedule_work(&ctx->extcon_wq); > > > + > > > + return NOTIFY_DONE; > > > +} > > > + > > > +static int sii9234_extcon_init(struct sii9234 *ctx) > > > +{ > > > + struct extcon_dev *edev; > > > + struct device_node *musb, *muic; > > > + int ret; > > > + > > > + /* Get micro-USB connector node */ > > > + musb = of_graph_get_remote_node(ctx->dev->of_node, 1, -1); > > > + /* Then get micro-USB Interface Controller node */ > > > + muic = of_get_next_parent(musb); > > > + > > > + if (!muic) { > > > + dev_info(ctx->dev, > > > + "no extcon found, switching to 'always on' > mode\n"); > > > + return 0; > > > + } > > > + > > > + edev = extcon_find_edev_by_node(muic); > > > + of_node_put(muic); > > > + if (IS_ERR(edev)) { > > > + dev_err_probe(ctx->dev, PTR_ERR(edev), > > > + "invalid or missing extcon\n"); > > > + } > > > + > > > + ctx->extcon = edev; > > > + ctx->extcon_nb.notifier_call = sii9234_extcon_notifier; > > > + INIT_WORK(&ctx->extcon_wq, sii9234_extcon_work); > > > + ret = extcon_register_notifier(edev, EXTCON_DISP_MHL, > &ctx->extcon_nb); > > > + if (ret) { > > > + dev_err(ctx->dev, "failed to register notifier for MHL\n"); > > > + return ret; > > > + } > > > + > > > + return 0; > > > +} > > > + > > > static enum drm_mode_status sii9234_mode_valid(struct drm_bridge > *bridge, > > > const struct drm_display_info > *info, > > > const struct drm_display_mode > *mode) > > > @@ -916,12 +986,17 @@ static int sii9234_probe(struct i2c_client > *client) > > > if (ret < 0) > > > return ret; > > > > > > + ret = sii9234_extcon_init(ctx); > > > + if (ret < 0) > > > + return ret; > > > + > > > i2c_set_clientdata(client, ctx); > > > > > > ctx->bridge.of_node = dev->of_node; > > > drm_bridge_add(&ctx->bridge); > > > > > > - sii9234_cable_in(ctx); > > > + if (!ctx->extcon) > > > + sii9234_cable_in(ctx); > > > > > > return 0; > > > } > > > @@ -930,7 +1005,15 @@ static void sii9234_remove(struct i2c_client > *client) > > > { > > > struct sii9234 *ctx = i2c_get_clientdata(client); > > > > > > - sii9234_cable_out(ctx); > > > + if (ctx->extcon) { > > > + extcon_unregister_notifier(ctx->extcon, EXTCON_DISP_MHL, > > > + &ctx->extcon_nb); > > > + flush_work(&ctx->extcon_wq); > > > + if (ctx->cable_state > 0) > > > + sii9234_cable_out(ctx); > > > + } else { > > > + sii9234_cable_out(ctx); > > > + } > > > drm_bridge_remove(&ctx->bridge); > > > } > > > > > > > > Best regards > > -- > > Marek Szyprowski, PhD > > Samsung R&D Institute Poland > > > > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > Replicant mailing list > [email protected] > https://lists.osuosl.org/mailman/listinfo/replicant > > > ------------------------------ > > End of Replicant Digest, Vol 491, Issue 2 > ***************************************** >
_______________________________________________ Replicant mailing list [email protected] https://lists.osuosl.org/mailman/listinfo/replicant
