1. 29 12月, 2015 1 次提交
  2. 17 6月, 2015 2 次提交
    • T
      OMAPDSS: componentize omapdss · 736e60dd
      Tomi Valkeinen 提交于
      omapdss kernel module contains drivers for multiple devices, one for
      each DSS submodule. The probing we have at the moment is a mess, and
      doesn't give us proper deferred probing nor ensure that all the devices
      are probed before omapfb/omapdrm start using omapdss.
      
      This patch solves the mess by using the component system for DSS
      submodules.
      
      The changes to all DSS submodules (dispc, dpi, dsi, hdmi4/5, rfbi, sdi,
      venc) are the same: probe & remove functions are changed to bind &
      unbind, and new probe & remove functions are added which call
      component_add/del.
      
      The dss_core driver (dss.c) acts as a component master. Adding and
      matching the components is simple: all dss device's child devices are
      added as components.
      
      However, we do have some dependencies between the drivers. The order in
      which they should be probed is reflected by the list in core.c
      (dss_output_drv_reg_funcs). The drivers are registered in that order,
      which causes the components to be added in that order, which makes the
      components to be bound in that order. This feels a bit fragile, and we
      probably should improve the code to manage binds in random order.
      However, for now, this works fine.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      Acked-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      736e60dd
    • T
      OMAPDSS: remove uses of __init/__exit · ede92695
      Tomi Valkeinen 提交于
      The following patches will add component handling to omapdss, improving
      the handling of deferred probing. However, at the moment we're using
      quite a lot of __inits and __exits in the driver, which prevent normal
      dynamic probing and removal.
      
      This patch removes most of the uses of __init and __exit, so that we can
      register drivers after module init, and so that we can unregister
      drivers even if the module is built-in.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      Acked-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      ede92695
  3. 30 12月, 2014 1 次提交
  4. 12 11月, 2014 1 次提交
    • A
      OMAPDSS: DSS: init dss ports cleanly · 387ce9f2
      Archit Taneja 提交于
      The init/uninit port functions are used to set up the DPI and SDI outputs under
      the dss platform device. A 'reg' property is used to determine the port number
      of the output. This tells us whether the port is DPI or SDI for OMAP34xx DSS
      revision. For other DSS revisions, we only have DPI outputs under the dss
      platform device.
      
      For multiple DPI output instances(introduced in DRA7xx DSS), we will use the
      the port number to specify which DPI output instance is being inited.
      
      The current functions work fine if there is only one DPI output instance in
      DSS. For multiple DPI instances, it would get complicated to figure out whether
      port number was used to specify whether the output is SDI, or another DPI
      instance.
      
      We create a list of port types supported for each DSS rev, with the index of the
      port in the list specifying the port number of the output for that DSS revision.
      This allows us to have a more generic way to init/uninit ports within DSS, and
      also support multiple DPI ports.
      
      We make the uninit_port functions iterative since we will have multiple DPI
      ports to uninit in the future.
      Signed-off-by: NArchit Taneja <archit@ti.com>
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      387ce9f2
  5. 22 10月, 2014 1 次提交
    • T
      OMAPDSS: set suppress_bind_attrs · 422ccbd5
      Tomi Valkeinen 提交于
      omapdss drivers cannot handle devices being unbound while the devices
      are part of a connected display pipeline. Module refcounts are used to
      prevent unloading the modules, but one can still manually unbind the
      devices via sysfs, causing crash.
      
      Set suppress_bind_attrs to disable the bind/unbind support via sysfs.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      422ccbd5
  6. 20 10月, 2014 1 次提交
  7. 17 4月, 2014 1 次提交
  8. 19 3月, 2014 1 次提交
    • T
      OMAPDSS: Add DT support to DSS · 2ecef246
      Tomi Valkeinen 提交于
      Add DT support for DSS. Contrary to the non-DT version, the DSS in DT
      mode contains DPI and SDI outputs, which better reflects the hardware.
      The non-DT code will be removed after all boards have been converted to
      DT, so there's no need to change the non-DT code to act the same way.
      
      The code for DPI and SDI needs to be refined later to make it possible
      to add multiple DPI ports. For now, handling just a single DPI port is
      enough for all the boards.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      Reviewed-by: NArchit Taneja <archit@ti.com>
      2ecef246
  9. 05 3月, 2014 1 次提交
    • T
      OMAPDSS: convert pixel clock to common videomode style · d8d78941
      Tomi Valkeinen 提交于
      omapdss has its own video-timings struct, but we want to move the common
      videomode.
      
      The first step is to change the omapdss's pixelclock unit from kHz to
      Hz. Also, omapdss uses "pixel_clock" field name, whereas the common
      videomode uses "pixelclock" field name. This patch changes the field
      name also, as that makes it easy to spot any non-converted pixel_clock
      uses.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      d8d78941
  10. 11 2月, 2014 1 次提交
  11. 13 1月, 2014 1 次提交
    • T
      OMAPDSS: don't print errors on -EPROBE_DEFER · 40359a9b
      Tomi Valkeinen 提交于
      Nowadays it's normal to get -EPROBE_DEFER from, e.g., regulator_get. As
      -EPROBE_DEFER is not really an error, and the driver will be probed fine
      a bit later, printing an error message will just confuse the user.
      
      This patch changes omapdss to print an error for regulator_gets only if
      the error code is something else than -EPROBE_DEFER.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      40359a9b
  12. 18 11月, 2013 2 次提交
  13. 30 8月, 2013 1 次提交
    • T
      OMAPDSS: rename omap_dss_device's 'device' field to 'dst' · 9560dc10
      Tomi Valkeinen 提交于
      In the old panel device model we had omap_dss_output entities,
      representing the encoders in the DSS block. This entity had "device"
      field, which pointed to the panel that was using the omap_dss_output.
      
      With the new panel device model, the omap_dss_output is integrated into
      omap_dss_device, which now represents a "display entity". Thus the "device"
      field, now in omap_dss_device, points to the next entity in the display
      entity-chain.
      
      This patch renames the "device" field to "dst", which much better tells
      what the field points to.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      Reviewed-by: NArchit Taneja <archit@ti.com>
      9560dc10
  14. 29 8月, 2013 2 次提交
  15. 17 6月, 2013 9 次提交
    • T
      OMAPDSS: SDI: Add ops · b1082dfd
      Tomi Valkeinen 提交于
      Add "ops" style method for using SDI functionality.
      
      Ops style calls will allow us to have arbitrarily long display
      pipelines, where each entity can call ops in the previous display
      entity.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      b1082dfd
    • T
      OMAPDSS: public omapdss_register_output() · 5d47dbc8
      Tomi Valkeinen 提交于
      In order to allow multiple display block in a video pipeline, we need to
      give the drivers way to register themselves. For now we have
      the omapdss_register_display() which is used to register panels, and
      dss_register_output() which is used to register DSS encoders.
      
      This patch makes dss_register_output() public (with the name of
      omapdss_register_output), which can be used to register also external
      encoders. The distinction between register_output and register_display
      is that a "display" is an entity at the end of the videopipeline, and
      "output" is something inside the pipeline.
      
      The registration and naming will be made saner in the future, but the
      current names and functions are kept to minimize changes during the dss
      device model transition.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      5d47dbc8
    • T
      OMAPDSS: add THIS_MODULE owner to DSS outputs · b7328e14
      Tomi Valkeinen 提交于
      Setup the owner field for DSS output's omap_dss_device so that module
      refcounting works.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      b7328e14
    • T
      OMAPDSS: combine omap_dss_output into omap_dss_device · 1f68d9c4
      Tomi Valkeinen 提交于
      We currently have omap_dss_device, which represents an external display
      device, sometimes an external encoder, sometimes a panel. Then we have
      omap_dss_output, which represents DSS's output encoder.
      
      In the future with new display device model, we construct a video
      pipeline from the display blocks. To accomplish this, all the blocks
      need to be presented by the same entity.
      
      Thus, this patch combines omap_dss_output into omap_dss_device. Some of
      the fields in omap_dss_output are already found in omap_dss_device, but
      some are not. This means we'll have DSS output specific fields in
      omap_dss_device, which is not very nice. However, it is easier to just
      keep those output specific fields there for now, and after transition to
      new display device model is made, they can be cleaned up easier than
      could be done now.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      1f68d9c4
    • T
      OMAPDSS: remove omap_dss_start/stop_device() · d3923933
      Tomi Valkeinen 提交于
      The omap_dss_start_device() and omap_dss_stop_device(), called by the
      DSS output drivers, are old relics. They originally did something
      totally else, but nowadays they increase the module ref count for panels
      that are enabled.
      
      This model is quite broken: the panel modules may be used even before
      they are enabled. For example, configuring the panel requires calls to
      functions located in the panel modules.
      
      In the following patches we try to improve the ref count management for
      the modules and display devices. The first step, however, is to remove
      the omap_dss_start/stop_device() totally.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      d3923933
    • T
      OMAPDSS: remove dssdev uses in trivial cases · 7ae9a71e
      Tomi Valkeinen 提交于
      In the future the "dssdev" parameter passed to output drivers will
      change its meaning. Instead of being a pointer to the panel device, it's
      a pointer to the output instance.
      
      To make the transition easier, some of the uses for this dssdev
      parameter can be easily removed.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      7ae9a71e
    • T
      OMAPDSS: SDI: fix regulators for DT · 46c4b645
      Tomi Valkeinen 提交于
      SDI requires a regulator to operate. This regulator is, for some reason,
      currently attached to the virtual omapdss device, instead of the SDI
      device. This does not work for DT, as the regulator mappings need to be
      described in the DT data, and the virtual omapdss device is not present
      there.
      
      Fix the issue by acquiring the regulator in the SDI device. To retain
      compatibility with the current board files, the old method of getting
      the regulator is kept. The old method can be removed when the board
      files have been changed to pass the regulator to SDI.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      46c4b645
    • T
      OMAPDSS: SDI: clean up regulator init · d37801b3
      Tomi Valkeinen 提交于
      Clean up the SDI driver's regulator init to remove the (unused)
      omap_dss_device parameter, renaming the function to a more sensible
      name, and making the code slightly clearer.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      d37801b3
    • T
      OMAPDSS: only probe pdata if there's one · c6ca5b22
      Tomi Valkeinen 提交于
      omapdss output drivers always read the platform data. This crashes when
      there's no platform data when using DT.
      
      Add a check to read the platform data only if it exists.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      c6ca5b22
  16. 02 5月, 2013 2 次提交
  17. 03 4月, 2013 3 次提交
  18. 07 12月, 2012 1 次提交
    • T
      OMAPDSS: manage output-dssdev connection in output drivers · 486c0e17
      Tomi Valkeinen 提交于
      We currently attach an output to a dssdev in the initialization code for
      dssdevices in display.c. This works, but doesn't quite make sense: an
      output entity represents (surprisingly) an output of DSS, which is
      managed by an output driver. The output driver also handles adding new
      dssdev's for that particular output.
      
      It makes more sense to make the output-dssdev connection in the output
      driver. This is also in line with common display framework.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      486c0e17
  19. 29 10月, 2012 1 次提交
  20. 28 9月, 2012 1 次提交
  21. 26 9月, 2012 2 次提交
    • A
      OMAPDSS: SDI: Replace dssdev->manager with dssdev->output->manager references · 7d6069e5
      Archit Taneja 提交于
      With addition of output entities, a device connects to an output, and an output
      connects to overlay manager. Replace the dssdev->manager references with
      dssdev->output->manager to access the manager correctly.
      
      When enabling the SDI output, check whether the output entity connected to
      display is not NULL.
      Signed-off-by: NArchit Taneja <archit@ti.com>
      7d6069e5
    • A
      OMAPDSS: outputs: Create and register output instances · 81b87f51
      Archit Taneja 提交于
      Add output structs to output driver's private data. Register output instances by
      having an init function in the probes of the platform device drivers for
      different outputs. The *_init_output for each output registers the output and
      fill up the output's plaform device, type and id fields. The *_uninit_output
      functions unregister the output.
      
      In the probe of each interface driver, the output entities are initialized
      before the *_probe_pdata() functions intentionally. This is done to ensure that
      the output entity is prepared before the panels connected to the output are
      registered. We need the output entities to be ready because OMAPDSS will try
      to make connections between overlays, managers, outputs and devices during the
      panel's probe.
      Signed-off-by: NArchit Taneja <archit@ti.com>
      81b87f51
  22. 18 9月, 2012 3 次提交
    • T
      OMAPDSS: alloc dssdevs dynamically · 5274484b
      Tomi Valkeinen 提交于
      We currently create omap_dss_devices statically in board files, and use
      those devices directly in the omapdss driver. This model prevents us
      from having the platform data (which the dssdevs in board files
      practically are) as read-only, and it's also different than what we will
      use with device tree.
      
      This patch changes the model to be in line with DT model: we allocate
      the dssdevs dynamically, and initialize them according to the data in
      the board file's dssdev (basically we memcopy the dssdev fields).
      
      The allocation and registration is done in the following steps in the
      output drivers:
      
      - Use dss_alloc_and_init_device to allocate and initialize the device.
        The function uses kalloc and device_initialize to accomplish this.
      - Call dss_copy_device_pdata to copy the data from the board file's
        dssdev
      - Use dss_add_device to register the device.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      5274484b
    • T
      OMAPDSS: register only one display device per output · 1521653c
      Tomi Valkeinen 提交于
      We have boards with multiple panel devices connected to the same
      physical output, of which only one panel can be enabled at one time.
      Examples of these are Overo, where you can use different daughter boards
      that have different LCDs, and 3430SDP which has an LCD and a DVI output
      and a physical switch to select the active display.
      
      These are supported by omapdss so that we add all the possible display
      devices at probe, but the displays are inactive until somebody enables
      one. At this point the panel driver starts using the DSS, thus reserving
      the physcal resource and excluding the other panels.
      
      This is problematic:
      - Panel drivers can't allocate their resources properly at probe(),
        because the resources can be shared with other panels. Thus they can
        be only reserved at enable time.
      - Managing this in omapdss is confusing. It's not natural to have
        child devices, which may not even exist (for example, a daughterboard
        that is not connected).
      
      Only some boards have multiple displays per output, and of those, only
      very few have possibility of switching the display during runtime.
      Because of the above points:
      - We don't want to make omapdss and all the panel drivers more complex
        just because some boards have complex setups.
      - Only few boards support runtime switching, and afaik even then it's
        not required. So we don't need to support runtime switching.
      
      Thus we'll change to a model where we will have only one display device
      per output and this cannot be (currently) changed at runtime. We'll
      still have the possibility to select the display from multiple options
      during boot with the default display option.
      
      This patch accomplishes the above by changing how the output drivers
      register the display device. Instead of registering all the devices
      given from the board file, we'll only register one. If the default
      display option is set, the output driver selects that display from its
      displays. If the default display is not set, or the default display is
      not one of the output's displays, the output driver selects the first
      display.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      1521653c
    • T
      OMAPDSS: omap_dss_register_device() doesn't take display index · 8768a52f
      Tomi Valkeinen 提交于
      We used to have all the displays of the board in one list, and we made a
      "displayX" directory in the sysfs, where X was the index of the display
      in the list.
      
      This doesn't work anymore with device tree, as there's no single list to
      get the number from, and it doesn't work very well even with non-DT as
      we need to do some tricks to get the index nowadays.
      
      This patch changes omap_dss_register_device() so that it doesn't take
      disp_num as a parameter anymore, but uses a private increasing counter
      for the display number.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      8768a52f
  23. 08 9月, 2012 1 次提交
    • T
      OMAPDSS: fix set_timings · b82fe7f0
      Tomi Valkeinen 提交于
      set_timings function of DSS's output drivers are not consistent. Some of
      them disable the output, set the timings, and re-enable the output. Some
      set the timings on the fly, while the output is enabled. And some just
      store the given timings, so that they will be taken into use next time
      the output is enabled.
      
      We require the DISPC output to be disabled when changing the timings,
      and so we can change all the output drivers' set_timings to just store
      the given timings.
      Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
      b82fe7f0