Skip to content
  1. Jan 08, 2021
    • Maxime Ripard's avatar
      drm/atomic: Pass the full state to CRTC atomic begin and flush · 64f34612
      Maxime Ripard authored
      
      
      Commit f6ebe9f9 upstream.
      
      The current atomic helpers have either their object state being passed as
      an argument or the full atomic state.
      
      The former is the pattern that was done at first, before switching to the
      latter for new hooks or when it was needed.
      
      Let's start convert all the remaining helpers to provide a consistent
      interface, starting with the CRTC's atomic_begin and atomic_flush.
      
      The conversion was done using the coccinelle script below, built tested on
      all the drivers and actually tested on vc4.
      
      virtual report
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      identifier old_crtc_state, old_state;
      identifier crtc;
      identifier f;
      @@
      
       f(struct drm_crtc_state *old_crtc_state)
       {
      	...
       	struct drm_atomic_state *old_state = old_crtc_state->state;
      	<...
      -	FUNCS->atomic_begin(crtc, old_crtc_state);
      +	FUNCS->atomic_begin(crtc, old_state);
      	...>
       }
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      identifier old_crtc_state, old_state;
      identifier crtc;
      identifier f;
      @@
      
       f(struct drm_crtc_state *old_crtc_state)
       {
      	...
       	struct drm_atomic_state *old_state = old_crtc_state->state;
      	<...
      -	FUNCS->atomic_flush(crtc, old_crtc_state);
      +	FUNCS->atomic_flush(crtc, old_state);
      	...>
       }
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      struct drm_crtc *crtc;
      struct drm_crtc_state *crtc_state;
      identifier dev, state;
      identifier f;
      @@
      
       f(struct drm_device *dev, struct drm_atomic_state *state, ...)
       {
      	<...
      -	FUNCS->atomic_begin(crtc, crtc_state);
      +	FUNCS->atomic_begin(crtc, state);
      	...>
       }
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      struct drm_crtc *crtc;
      struct drm_crtc_state *crtc_state;
      identifier dev, state;
      identifier f;
      @@
      
       f(struct drm_device *dev, struct drm_atomic_state *state, ...)
       {
      	<...
      -	FUNCS->atomic_flush(crtc, crtc_state);
      +	FUNCS->atomic_flush(crtc, state);
      	...>
       }
      
      @@
      identifier crtc, old_state;
      @@
      
       struct drm_crtc_helper_funcs {
      	...
      -	void (*atomic_begin)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
      +	void (*atomic_begin)(struct drm_crtc *crtc, struct drm_atomic_state *state);
      	...
      -	void (*atomic_flush)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
      +	void (*atomic_flush)(struct drm_crtc *crtc, struct drm_atomic_state *state);
      	...
      }
      
      @ crtc_atomic_func @
      identifier helpers;
      identifier func;
      @@
      
      (
      static struct drm_crtc_helper_funcs helpers = {
      	...,
      	.atomic_begin = func,
      	...,
      };
      |
      static struct drm_crtc_helper_funcs helpers = {
      	...,
      	.atomic_flush = func,
      	...,
      };
      )
      
      @ ignores_old_state @
      identifier crtc_atomic_func.func;
      identifier crtc, old_state;
      @@
      
      void func(struct drm_crtc *crtc,
      		struct drm_crtc_state *old_state)
      {
      	... when != old_state
      }
      
      @ adds_old_state depends on crtc_atomic_func && !ignores_old_state @
      identifier crtc_atomic_func.func;
      identifier crtc, old_state;
      @@
      
      void func(struct drm_crtc *crtc, struct drm_crtc_state *old_state)
      {
      +	struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state, crtc);
      	...
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      expression E;
      type T;
      @@
      
      void func(...)
      {
      	...
      -	T state = E;
      +	T crtc_state = E;
      	<+...
      -	state
      +	crtc_state
      	...+>
      
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      type T;
      @@
      
      void func(...)
      {
      	...
      -	T state;
      +	T crtc_state;
      	<+...
      -	state
      +	crtc_state
      	...+>
      
      }
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vc4_hvs_atomic_flush(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   )
      {
      +	struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state, crtc);
      	...
      }
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vc4_hvs_atomic_flush(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   );
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vmw_du_crtc_atomic_begin(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   )
      {
      	...
      }
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vmw_du_crtc_atomic_begin(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   );
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vmw_du_crtc_atomic_flush(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   )
      {
      	...
      }
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vmw_du_crtc_atomic_flush(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   );
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      identifier old_state;
      identifier crtc;
      @@
      
      void func(struct drm_crtc *crtc,
      -	       struct drm_crtc_state *old_state
      +	       struct drm_atomic_state *state
      	       )
      		{ ... }
      
      @ include depends on adds_old_state @
      @@
      
       #include <drm/drm_atomic.h>
      
      @ no_include depends on !include && adds_old_state @
      @@
      
      + #include <drm/drm_atomic.h>
        #include <drm/...>
      
      Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Acked-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201028123222.1732139-2-maxime@cerno.tech
      64f34612
    • Maxime Ripard's avatar
      drm/atomic: Pass the full state to CRTC atomic_check · 50c9033f
      Maxime Ripard authored
      
      
      Commit 29b77ad7 upstream.
      
      The current atomic helpers have either their object state being passed as
      an argument or the full atomic state.
      
      The former is the pattern that was done at first, before switching to the
      latter for new hooks or when it was needed.
      
      Let's start convert all the remaining helpers to provide a consistent
      interface, starting with the CRTC's atomic_check.
      
      The conversion was done using the coccinelle script below,
      built tested on all the drivers and actually tested on vc4.
      
      virtual report
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      struct drm_crtc *crtc;
      struct drm_crtc_state *crtc_state;
      identifier dev, state;
      identifier ret, f;
      @@
      
       f(struct drm_device *dev, struct drm_atomic_state *state)
       {
      	<...
      -	ret = FUNCS->atomic_check(crtc, crtc_state);
      +	ret = FUNCS->atomic_check(crtc, state);
      	...>
       }
      
      @@
      identifier crtc, new_state;
      @@
      
       struct drm_crtc_helper_funcs {
       	...
      -	int (*atomic_check)(struct drm_crtc *crtc, struct drm_crtc_state *new_state);
      +	int (*atomic_check)(struct drm_crtc *crtc, struct drm_atomic_state *state);
       	...
      }
      
      @ crtc_atomic_func @
      identifier helpers;
      identifier func;
      @@
      
      static struct drm_crtc_helper_funcs helpers = {
      	...,
      	.atomic_check = func,
      	...,
      };
      
      @ ignores_new_state @
      identifier crtc_atomic_func.func;
      identifier crtc, new_state;
      @@
      
       int func(struct drm_crtc *crtc,
      		struct drm_crtc_state *new_state)
       {
      	... when != new_state
       }
      
      @ adds_new_state depends on crtc_atomic_func && !ignores_new_state @
      identifier crtc_atomic_func.func;
      identifier crtc, new_state;
      @@
      
       int func(struct drm_crtc *crtc, struct drm_crtc_state *new_state)
       {
      +	struct drm_crtc_state *new_state = drm_atomic_get_new_crtc_state(state, crtc);
       	...
       }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      expression E;
      type T;
      @@
      
       int func(...)
       {
      	...
      -	T state = E;
      +	T crtc_state = E;
       	<+...
      -	state
      +	crtc_state
       	...+>
       }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      type T;
      @@
      
       int func(...)
       {
       	...
      -	T state;
      +	T crtc_state;
       	<+...
      -	state
      +	crtc_state
       	...+>
       }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      identifier new_state;
      identifier crtc;
      @@
      
       int func(struct drm_crtc *crtc,
      -	       struct drm_crtc_state *new_state
      +	       struct drm_atomic_state *state
      	       )
       { ... }
      
      @@
      identifier new_state;
      identifier crtc;
      @@
      
       int vmw_du_crtc_atomic_check(struct drm_crtc *crtc,
      -                             struct drm_crtc_state *new_state
      +                             struct drm_atomic_state *state
                     )
       {
      +       struct drm_crtc_state *new_state = drm_atomic_get_new_crtc_state(state, crtc);
      	...
       }
      
      @@
      identifier new_state;
      identifier crtc;
      @@
      
       int vmw_du_crtc_atomic_check(struct drm_crtc *crtc,
      -                             struct drm_crtc_state *new_state
      +                             struct drm_atomic_state *state
                     );
      
      @ include depends on adds_new_state @
      @@
      
       #include <drm/drm_atomic.h>
      
      @ no_include depends on !include && adds_new_state @
      @@
      
      + #include <drm/drm_atomic.h>
        #include <drm/...>
      
      Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Acked-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201028123222.1732139-1-maxime@cerno.tech
      50c9033f
    • Maxime Ripard's avatar
      drm/atomic: Pass the full state to CRTC atomic enable/disable · bcbc6b03
      Maxime Ripard authored
      
      
      Commit 351f950d upstream.
      
      If the CRTC driver ever needs to access the full DRM state, it can't do so
      at atomic_enable / atomic_disable time since drm_atomic_helper_swap_state
      will have cleared the pointer from the struct drm_crtc_state to the struct
      drm_atomic_state before calling those hooks.
      
      In order to allow that, let's pass the full DRM state to atomic_enable and
      atomic_disable. The conversion was done using the coccinelle script below,
      built tested on all the drivers and actually tested on vc4.
      
      virtual report
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      identifier dev, state;
      identifier crtc, crtc_state;
      @@
      
       disable_outputs(struct drm_device *dev, struct drm_atomic_state *state)
       {
       	<...
      -	FUNCS->atomic_disable(crtc, crtc_state);
      +	FUNCS->atomic_disable(crtc, state);
       	...>
       }
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      identifier dev, state;
      identifier crtc, crtc_state;
      @@
      
       drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, struct drm_atomic_state *state)
       {
       	<...
      -	FUNCS->atomic_enable(crtc, crtc_state);
      +	FUNCS->atomic_enable(crtc, state);
       	...>
       }
      
      @@
      identifier crtc, old_state;
      @@
      
       struct drm_crtc_helper_funcs {
      	...
      -	void (*atomic_enable)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
      +	void (*atomic_enable)(struct drm_crtc *crtc, struct drm_atomic_state *state);
      	...
      -	void (*atomic_disable)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
      +	void (*atomic_disable)(struct drm_crtc *crtc, struct drm_atomic_state *state);
      	...
      }
      
      @ crtc_atomic_func @
      identifier helpers;
      identifier func;
      @@
      
      (
      static struct drm_crtc_helper_funcs helpers = {
      	...,
      	.atomic_enable = func,
      	...,
      };
      |
      static struct drm_crtc_helper_funcs helpers = {
      	...,
      	.atomic_disable = func,
      	...,
      };
      )
      
      @ ignores_old_state @
      identifier crtc_atomic_func.func;
      identifier crtc, old_state;
      @@
      
      void func(struct drm_crtc *crtc,
      		struct drm_crtc_state *old_state)
      {
      	... when != old_state
      }
      
      @ adds_old_state depends on crtc_atomic_func && !ignores_old_state @
      identifier crtc_atomic_func.func;
      identifier crtc, old_state;
      @@
      
      void func(struct drm_crtc *crtc, struct drm_crtc_state *old_state)
      {
      +	struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state, crtc);
      	...
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      expression E;
      type T;
      @@
      
      void func(...)
      {
      	...
      -	T state = E;
      +	T crtc_state = E;
      	<+...
      -	state
      +	crtc_state
      	...+>
      
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      type T;
      @@
      
      void func(...)
      {
      	...
      -	T state;
      +	T crtc_state;
      	<+...
      -	state
      +	crtc_state
      	...+>
      
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      identifier old_state;
      identifier crtc;
      @@
      
      void func(struct drm_crtc *crtc,
      -	       struct drm_crtc_state *old_state
      +	       struct drm_atomic_state *state
      	       )
      		{ ... }
      
      @ include depends on adds_old_state @
      @@
      
       #include <drm/drm_atomic.h>
      
      @ no_include depends on !include && adds_old_state @
      @@
      
      + #include <drm/drm_atomic.h>
        #include <drm/...>
      
      Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
      Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: https://patchwork.freedesktop.org/patch/msgid/845aa10ef171fc0ea060495efef142a0c13f7870.1602161031.git-series.maxime@cerno.tech
      bcbc6b03
    • Dave Stevenson's avatar
      staging/vc04_services/codec: Clear last buf dequeued flag on START · 3670b46f
      Dave Stevenson authored
      
      
      It appears that the V4L2 M2M framework requires the driver to manually
      call vb2_clear_last_buffer_dequeued on the CAPTURE queue during a
      V4L2_DEC_CMD_START.
      Add such a call.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      3670b46f
    • Dave Stevenson's avatar
      staging/vc04_services/codec: Add support for CID MPEG_HEADER_MODE · 7f30e603
      Dave Stevenson authored
      
      
      Control V4L2_CID_MPEG_VIDEO_HEADER_MODE controls whether the encoder
      is meant to emit the header bytes as a separate packet or with the
      first encoded frame.
      Add support for it.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      7f30e603
    • Naushir Patuck's avatar
      media: i2c: imx477: Selection compliance fixes · 852ae969
      Naushir Patuck authored
      
      
      To comply with the intended usage of the V4L2 selection target when
      used to retrieve a sensor image properties, adjust the rectangles
      returned by the imx477 driver.
      
      The top/left crop coordinates of the TGT_CROP rectangle were set to
      (0, 0) instead of (8, 16) which is the offset from the larger physical
      pixel array rectangle. This was also a mismatch with the default values
      crop rectangle value, so this is corrected. Found with v4l2-compliance.
      
      While at it, add V4L2_SEL_TGT_CROP_BOUNDS support: CROP_DEFAULT and
      CROP_BOUNDS have the same size as the non-active pixels are not readable
      using the selection API. Found with v4l2-compliance.
      
      This commit mirrors 543790f7 done for
      the imx219 sensor.
      
      Signed-off-by: default avatarNaushir Patuck <naush@raspberrypi.com>
      852ae969
    • Phil Elwell's avatar
      overlays: Add missing addresses to ads1015/ads1115 · 297a45a3
      Phil Elwell authored
      The overlays for the ads1015 and ads1115 I2C ADCs omitted the addresses
      in the main device node names. As well as breaking the conventions for
      I2C devices, this prevents the firmware from renaming them when the
      "reg" property is modified, which in turn stops the overlays from being
      instantiated multiple times.
      
      See: https://www.raspberrypi.org/forums/viewtopic.php?f=107&t=294465
      
      
      
      Signed-off-by: default avatarPhil Elwell <phil@raspberrypi.com>
      297a45a3
    • Dom Cobley's avatar
      drm/vc4: Make normalize_zpos conditional on using fkms · 1c42d300
      Dom Cobley authored
      
      
      Eric's view was that there was no point in having zpos
      support on vc4 as all the planes had the same functionality.
      
      Can be later squashed into (and fixes):
      drm/vc4: Add firmware-kms mode
      
      Signed-off-by: default avatarDom Cobley <popcornmix@gmail.com>
      1c42d300
    • Phil Elwell's avatar
      overlays: mpu6050: Add 'addr' parameter · a82b1c66
      Phil Elwell authored
      The mpu6050 starts up at address 0x68 by default, but can be set to
      0x69 if the ADO pin is pulled high. Give the overlay an addr parameter
      to allow devices at the alternate address to be used.
      
      See: https://github.com/Hexxeh/rpi-firmware/issues/252
      
      
      
      Signed-off-by: default avatarPhil Elwell <phil@raspberrypi.com>
      a82b1c66
    • Phil Elwell's avatar
      net: lan78xx: Ack pending PHY ints when resetting · b5ee95ec
      Phil Elwell authored
      lan78xx_link_reset explicitly clears the MAC's view of the PHY's IRQ
      status. In doing so it potentially leaves the PHY with a pending
      interrupt that will never be acknowledged, at which point no further
      interrupts will be generated.
      
      Avoid the problem by acknowledging any pending PHY interrupt after
      clearing the MAC's status bit.
      
      See: https://github.com/raspberrypi/linux/issues/2937
      
      
      
      Signed-off-by: default avatarPhil Elwell <phil@raspberrypi.com>
      b5ee95ec
    • Naushir Patuck's avatar
      Revert "media: videobuf2: Fix length check for single plane dmabuf queueing" · d63c9d0f
      Naushir Patuck authored
      
      
      This reverts commit 961d3b27.
      
      The updated length check for dmabuf types broke existing usage in v4l2
      userland clients.
      
      Signed-off-by: default avatarNaushir Patuck <naush@raspberrypi.com>
      d63c9d0f
    • Dave Stevenson's avatar
      staging/bcm2835-codec: Ensure OUTPUT timestamps are always forwarded · dad6ae93
      Dave Stevenson authored
      
      
      The firmware by default tries to ensure that decoded frame
      timestamps always increment. This is counter to the V4L2 API
      which wants exactly the OUTPUT queue timestamps passed to the
      CAPTURE queue buffers.
      
      Disable the firmware option.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      dad6ae93
    • Phil Elwell's avatar
      675cbc67
    • Phil Elwell's avatar
      overlays: Add PCF85063 and PCF85063A to i2c-rtc · 3a48c5ea
      Phil Elwell authored
      
      
      Add support for the PCF85063 and PCF85063A RTC devices to the
      i2c-rtc overlay.
      
      Also enable the device to be used on i2c0 (i2c_vc) on GPIOs 0&1 (use
      parameter "i2c0") and GPIOs 44 & 45 (use parameter "i2c_csi_dsi").
      
      Signed-off-by: default avatarPhil Elwell <phil@raspberrypi.com>
      3a48c5ea
    • Phil Elwell's avatar
      configs: Add RTC_DRV_PCF85063=m · ddb2fe4b
      Phil Elwell authored
      
      
      Include the driver module for the PCF85063 and PCF85063A RTC devices.
      
      Signed-off-by: default avatarPhil Elwell <phil@raspberrypi.com>
      ddb2fe4b
    • Phil Elwell's avatar
      ARM: dts: CM4 audio pins are not connected · 7887afde
      Phil Elwell authored
      
      
      Signed-off-by: default avatarPhil Elwell <phil@raspberrypi.com>
      7887afde
    • Phil Elwell's avatar
      PCI: brcmstb: Advertise MSI-X support · 78d30c79
      Phil Elwell authored
      
      
      Although the BRCMSTB PCIe interface doesn't technically support the
      MSI-X spec, in practise it seems to work provided no more than 32
      MSI-Xs are required. Add the required flag to the driver to allow
      experimentation with devices that demand MSI-X support.
      
      Signed-off-by: default avatarPhil Elwell <phil@raspberrypi.com>
      78d30c79
    • Naushir Patuck's avatar
      media: bcm2835-unicam: Clear clock state when stopping streaming · 482f5ecf
      Naushir Patuck authored
      
      
      Commit 65e08c465020d4c5b51afb452efc2246d80fd66f failed to clear the
      clock state when the device stopped streaming. Fix this, as it might
      again cause the same problems when doing an unprepare.
      
      Signed-off-by: default avatarNaushir Patuck <naush@raspberrypi.com>
      482f5ecf
    • Naushir Patuck's avatar
      media: bcm2835-unicam: Return early from stop_streaming() if stopped · 2a02aa88
      Naushir Patuck authored
      
      
      clk_disable_unprepare() is called unconditionally in stop_streaming().
      This is incorrect in the cases where start_streaming() fails, and
      unprepares all clocks as part of the failure cleanup. To avoid this,
      ensure that clk_disable_unprepare() is only called in stop_streaming()
      if the clocks are in a prepared state.
      
      Signed-off-by: default avatarNaushir Patuck <naush@raspberrypi.com>
      2a02aa88
    • Naushir Patuck's avatar
      media: bcm2835-unicam: Correctly handle error propagation for stream on · 1cd5b384
      Naushir Patuck authored
      
      
      On a failure in start_streaming(), the error code would not propagate to
      the calling function on all conditions. This would cause the userland
      caller to not know of the failure.
      
      Signed-off-by: default avatarNaushir Patuck <naush@raspberrypi.com>
      1cd5b384
    • paul-1's avatar
      Overlay: Update Allo Piano Plus dac driver for 5.4.y kernels. · f1def368
      paul-1 authored
      
      
      Create unique names for the two instances of the codec driver.
      
      Signed-off-by: default avatarPaul Hermann <paul@picoreplayer.org>
      f1def368
    • Sudeep's avatar
      Add allo boss2 config · 8cbb2874
      Sudeep authored
      
      
      Signed-off-by: default avatarSudeep <sudeepkumar@cem-solutions.net>
      8cbb2874
    • Sudeep's avatar
      Add allo boss2 overlay · 804a6e2f
      Sudeep authored
      
      
      Signed-off-by: default avatarSudeep <sudeepkumar@cem-solutions.net>
      804a6e2f
    • Sudeep's avatar
      Allo boss2 driver · 5121b33c
      Sudeep authored
      
      
      Signed-off-by: default avatarSudeep <sudeepkumar@cem-solutions.net>
      5121b33c
    • Dave Stevenson's avatar
      drm/vc4: Correct DSI register definition · 6bf0c7a8
      Dave Stevenson authored
      
      
      The DSI1_PHY_AFEC0_PD_DLANE1 and DSI1_PHY_AFEC0_PD_DLANE3 register
      definitions were swapped, so trying to use more than a single data
      lane failed as lane 1 would get powered down.
      (In theory a 4 lane device would work as all lanes would remain
      powered).
      
      Correct the definitions.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      6bf0c7a8
    • Dom Cobley's avatar
      vc4_hdmi: Move hdmi reset to bind · 99427bb5
      Dom Cobley authored
      
      
      The hdmi reset got moved to a later point in
      "drm/vc4: hdmi: Add reset callback"
      
      which now occurs after vc4_hdmi_cec_init
      and so tramples the setup of registers like
      HDMI_CEC_CNTRL_1
      
      This only affects pi0-3 as on pi4 the cec
      resgisters are in a separate block
      
      Fixes: ed9a1f6eb4402b25b8a983dc4bfe40f025176e03
      Signed-off-by: default avatarDom Cobley <popcornmix@gmail.com>
      99427bb5
    • Dave Stevenson's avatar
      dt: Use compatible string for BCM2711 DSI1 · d24d470d
      Dave Stevenson authored
      
      
      Updates the compatible string for DSI1 on BCM2711 to
      differentiate it from BCM2835.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      d24d470d
    • Dave Stevenson's avatar
      drm/vc4: Add configuration for BCM2711 DSI1. · 746579f0
      Dave Stevenson authored
      
      
      BCM2711 DSI1 doesn't have the issue with the ARM not being
      able to write to the registers, therefore remove the DMA
      workaround for that compatible string.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      746579f0
    • Dave Stevenson's avatar
      dt-bindings: Add compatible for BCM2711 DSI1 · f8ca1631
      Dave Stevenson authored
      
      
      DSI1 on BCM2711 doesn't require the DMA workaround that is used
      on BCM2835/6/7, therefore it needs a new compatible string.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      f8ca1631
    • Dave Stevenson's avatar
      drm/vc4: Add support for DSI0 · 90ffdc6a
      Dave Stevenson authored
      
      
      DSI0 was partially supported, but didn't register with the main
      driver, and the code was inconsistent as to whether it checked
      port == 0 or port == 1.
      
      Add compatible string and other support to make it consistent.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      90ffdc6a
    • Dave Stevenson's avatar
      media: ov9281: Add 1280x720 and 640x480 modes · 79f00e00
      Dave Stevenson authored
      
      
      Breaks out common register set and adds the different registers
      for 1280x720 (cropped) and 640x480 (skipped) modes
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      79f00e00
    • MichaIng's avatar
      configs: Enable WireGuard kernel module on armhf configs · 53856649
      MichaIng authored
      
      
      CONFIG_WIREGUARD=m implies CONFIG_ARM_CRYPTO=y, hence the latter is removed.
      
      Signed-off-by: default avatarMichaIng <micha@dietpi.com>
      53856649
    • Phil Elwell's avatar
      configs: Restore BRIDGE_NETFILTER=m · 31835dea
      Phil Elwell authored
      CONFIG_BRIDGE_NETFILTER=m used to be the default when CONFIG_NETFILTER
      was enabled, but that was removed in 5.9. The way that defconfigs work
      caused this wanted setting to be lost in rpi-5.9.y and rpi-5.10.y -
      restore it now.
      
      See: https://github.com/Hexxeh/rpi-firmware/issues/248
      
      
      
      Signed-off-by: default avatarPhil Elwell <phil@raspberrypi.com>
      31835dea
    • Phil Elwell's avatar
      configs: Regenerate the defconfigs · 2c5a6876
      Phil Elwell authored
      
      
      The CAN_ISOTP setting was in the wrong position, and it's better for
      bisecting and reverting if this doesn't get rolled into the next
      config-changing commit.
      
      Signed-off-by: default avatarPhil Elwell <phil@raspberrypi.com>
      2c5a6876
    • Marc Kleine-Budde's avatar
      mcp251xfd: add overlay · fa7b1249
      Marc Kleine-Budde authored
      
      
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      fa7b1249
    • Dave Stevenson's avatar
    • Dave Stevenson's avatar
      drm/panel/raspberrypi-ts: Insert delay before polling for startup state · 980a41a5
      Dave Stevenson authored
      
      
      In switching to the hardware I2C controller there is an issue
      where we seem to not get back the correct state from the Pi
      touchscreen.
      Insert a delay before polling to avoid this condition.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      980a41a5
    • Dave Stevenson's avatar
      drm/panel/raspberrypi-touchscreen: Use independent I2C actions with delay. · 2d6c9942
      Dave Stevenson authored
      
      
      We now have the hardware I2C controller pinmuxed to the drive the
      display I2C, but this controller does not support clock stretching.
      The Atmel micro-controller in the panel requires clock stretching
      to allow it to prepare any data to be read.
      
      Split the rpi_touchscreen_i2c_read into two independent transactions with
      a delay between them for the Atmel to prepare the data.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      2d6c9942
    • Dave Stevenson's avatar
      dtoverlays: Add an overlay for the EDT FT5406 touchscreen · 9e4bf941
      Dave Stevenson authored
      
      
      This touchscreen controller is used by the 7" DSI panel, and
      this overlay configures it for when it is NOT being polled by
      the firmware.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      9e4bf941
    • Dave Stevenson's avatar
      Input: edt-ft5x06: Poll the device if no interrupt is configured. · 6712c891
      Dave Stevenson authored
      
      
      Not all systems have the interrupt line wired up, so switch to
      polling the touchscreen off a timer if no interrupt line is
      configured.
      
      Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      6712c891