1. 18 Jul, 2016 1 commit
    • Archit Taneja's avatar
      drm: rcar-du: Remove i2c slave encoder interface for hdmi encoder · 1d926114
      Archit Taneja authored
      The hdmi output in rcar-du uses the i2c slave encoder interface to link
      to the adv7511 encoder chip. The kms driver creates encoder and connector
      entities that internally uses the drm_encoder_slave_funcs ops provided by
      the slave encoder driver.
      
      Change the driver such that it expects a bridge entity instead of a slave
      encoder. The hdmi connector code isn't needed anymore as we expect the
      adv7511 bridge driver to create/manage the connector.
      
      Note that the kms driver still expects a connector node for hdmi to be
      present in DT. This node has no connection to the connector created
      by the bridge driver.
      Tested-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
      1d926114
  2. 17 Jul, 2016 2 commits
  3. 13 Jul, 2016 8 commits
    • Archit Taneja's avatar
      dt-bindings: drm/bridge: Update bindings for ADV7533 · 2cc961df
      Archit Taneja authored
      Add description of ADV7533. Add the required and optional properties that
      are specific to it.
      
      Cc: devicetree@vger.kernel.org
      Acked-by: default avatarRob Herring <robh@kernel.org>
      Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
      2cc961df
    • Archit Taneja's avatar
      drm/bridge: adv7533: Change number of DSI lanes dynamically · 62b2f026
      Archit Taneja authored
      Lower modes on ADV7533 require lower number of DSI lanes for correct
      operation. If ADV7533 is being used with 4 DSI lanes, then switch the
      lanes to 3 when the target mode's pixel clock is less than 80 Mhz.
      
      Based on patch by Andy Green <andy.green@linaro.org>
      Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
      62b2f026
    • Archit Taneja's avatar
      drm/bridge: adv7533: Use internal timing generator · 78fa479d
      Archit Taneja authored
      ADV7533 provides an internal timing generator for certain modes that it
      can't use the DSI clock directly.
      
      We've observed that HDMI is more stable with the internal timing
      generator, especially if there are instabilities in the DSI clock source.
      The data spec also seems to recommend the usage of the timing generator
      for all modes.
      
      However, on some platforms, it's reported that enabling the timing
      generator causes instabilities with the HDMI output.
      
      Create a DT parameter that lets a platform explicitly disable the timing
      generator. The timing generator is enabled by default.
      Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
      78fa479d
    • Archit Taneja's avatar
      drm/bridge: adv7533: Create a MIPI DSI device · 1e4d58cd
      Archit Taneja authored
      In order to pass DSI specific parameters to the DSI host, we need the
      driver to create a mipi_dsi_device DSI device that attaches to the
      host.
      
      Use of_graph helpers to get the DSI host DT node. Create a MIPI DSI
      device using this host. Finally, attach this device to the DSI host.
      
      Populate DT parameters (number of data lanes for now) that are required
      for DSI RX to work correctly. Hardcode few other parameters (rgb,
      embedded_sync) for now.
      
      Select DRM_MIPI_DSI config option only when ADV7533 support is enabled.
      Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
      1e4d58cd
    • Archit Taneja's avatar
      drm/bridge: adv7533: Initial support for ADV7533 · 2437e7cd
      Archit Taneja authored
      ADV7533 is a DSI to HDMI encoder chip. It is a derivative of ADV7511,
      with additional blocks to translate input DSI data to parallel RGB
      data. Besides the ADV7511 I2C register map, it has additional registers
      that require to be configured to activate the DSI Rx block.
      
      Create a new config that enables ADV7533 support. Use DT compatible
      strings to populate the ADV7533 type enum. Add minimal register
      configurations belonging to the DSI/CEC register map. Keep the ADV7533
      code in a separate file.
      
      Originally worked on by Lars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
      2437e7cd
    • Archit Taneja's avatar
      drm/bridge: adv7511: Fix mutex deadlock when interrupts are disabled · f0bfcc22
      Archit Taneja authored
      When the adv7511 i2c client doesn't have an interrupt line, we observe a
      deadlock on caused by trying to lock drm device's mode_config.mutex twice
      in the same context.
      
      Here is the sequence that causes it:
      
      ioctl DRM_IOCTL_MODE_GETCONNECTOR from userspace
        drm_mode_getconnector (acquires mode_config mutex)
          connector->fill_modes()
          drm_helper_probe_single_connector_modes
            connector_funcs->get_modes
      	adv7511_encoder_get_modes
      	  adv7511_get_edid_block
      	    adv7511_irq_process
      	      drm_helper_hpd_irq_event (acquires mode_config mutex again)
      
      In adv7511_irq_process, don't call drm_helper_hpd_irq_event when not
      called from the interrupt handler. It doesn't serve any purpose there
      anyway.
      Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
      f0bfcc22
    • Archit Taneja's avatar
      drm/i2c: adv7511: Move to bridge folder · c5827789
      Archit Taneja authored
      The driver has been converted to use drm_bridge instead of
      drm_i2c_slave_encoder. We can now move it to the bridge folder.
      
      Create a separate folder since we already have a couple of files and
      expect more when we support audio and ADV7533.
      
      Rename the driver to adv7511_drv.c. This will come in handy later
      when the driver module will need to be built from multiple object
      files.
      Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
      c5827789
    • Archit Taneja's avatar
      drm/i2c: adv7511: Convert to drm_bridge · e12c2f64
      Archit Taneja authored
      We don't want to use the old i2c slave encoder interface anymore.
      
      Remove that and make the i2c driver create a drm_bridge entity instead.
      Converting to bridges helps because the kms drivers don't need to
      exract encoder slave ops from this driver and use it within their
      own encoder/connector ops.
      
      The driver now creates its own connector when a kms driver attaches
      itself to the bridge. Therefore, kms drivers don't need to create
      their own connectors anymore.
      
      The old encoder slave ops are now used by the new bridge and connector
      entities.
      
      The of_node member in drm_bridge is accessible only when CONFIG_OF is
      enabled. The driver anyway only works only when OF is available. Make
      the driver depend on OF in its Kconfig.
      Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
      e12c2f64
  4. 30 Jun, 2016 1 commit
  5. 27 Jun, 2016 1 commit
  6. 24 Jun, 2016 20 commits
  7. 22 Jun, 2016 5 commits
  8. 21 Jun, 2016 2 commits