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

Reply via email to