Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 4 Apr 2014 16:50:07 +0000 (09:50 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 4 Apr 2014 16:50:07 +0000 (09:50 -0700)
Pull media updates from Mauro Carvalho Chehab:
 "The main set of series of patches for media subsystem, including:
   - document RC sysfs class
   - added an API to setup scancode to allow waking up systems using the
     Remote Controller
   - add API for SDR devices.  Drivers are still on staging
   - some API improvements for getting EDID data from media
     inputs/outputs
   - new DVB frontend driver for drx-j (ATSC)
   - one driver (it913x/it9137) got removed, in favor of an improvement
     on another driver (af9035)
   - added a skeleton V4L2 PCI driver at documentation
   - added a dual flash driver (lm3646)
   - added a new IR driver (img-ir)
   - added an IR scancode decoder for the Sharp protocol
   - some improvements at the usbtv driver, to allow its core to be
     reused.
   - added a new SDR driver (rtl2832u_sdr)
   - added a new tuner driver (msi001)
   - several improvements at em28xx driver to fix PM support, device
     removal and to split the V4L2 specific bits into a separate
     sub-driver
   - one driver got converted to videobuf2 (s2255drv)
   - the e4000 tuner driver now follows an improved binding model
   - some fixes at V4L2 compat32 code
   - several fixes and enhancements at videobuf2 code
   - some cleanups at V4L2 API documentation
   - usual driver enhancements, new board additions and misc fixups"

[ NOTE! This merge effective drops commit 4329b93b283c ("of: Reduce
  indentation in of_graph_get_next_endpoint").

  The of_graph_get_next_endpoint() function was moved and renamed by
  commit fd9fdb78a9bf ("[media] of: move graph helpers from
  drivers/media/v4l2-core to drivers/of").  It was originally called
  v4l2_of_get_next_endpoint() and lived in the file
  drivers/media/v4l2-core/v4l2-of.c.

  In that original location, it was then fixed to support empty port
  nodes by commit b9db140c1e46 ("[media] v4l: of: Support empty port
  nodes"), and that commit clashes badly with the dropped "Reduce
  intendation" commit.  I had to choose one or the other, and decided
  that the "Support empty port nodes" commit was more important ]

* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (426 commits)
  [media] em28xx-dvb: fix PCTV 461e tuner I2C binding
  Revert "[media] em28xx-dvb: fix PCTV 461e tuner I2C binding"
  [media] em28xx: fix PCTV 290e LNA oops
  [media] em28xx-dvb: fix PCTV 461e tuner I2C binding
  [media] m88ds3103: fix bug on .set_tone()
  [media] saa7134: fix WARN_ON during resume
  [media] v4l2-dv-timings: add module name, description, license
  [media] videodev2.h: add parenthesis around macro arguments
  [media] saa6752hs: depends on CRC32
  [media] si4713: fix Kconfig dependencies
  [media] Sensoray 2255 uses videobuf2
  [media] adv7180: free an interrupt on failure paths in init_device()
  [media] e4000: make VIDEO_V4L2 dependency optional
  [media] af9033: Don't export functions for the hardware filter
  [media] af9035: use af9033 PID filters
  [media] af9033: implement PID filter
  [media] rtl2832_sdr: do not use dynamic stack allocation
  [media] e4000: fix 32-bit build error
  [media] em28xx-audio: make sure audio is unmuted on open()
  [media] DocBook media: v4l2_format_sdr was renamed to v4l2_sdr_format
  ...

15 files changed:
1  2 
CREDITS
Documentation/devices.txt
MAINTAINERS
drivers/edac/i5400_edac.c
drivers/edac/i7core_edac.c
drivers/edac/sb_edac.c
drivers/media/i2c/mt9p031.c
drivers/media/usb/em28xx/em28xx-audio.c
drivers/media/usb/tm6000/tm6000-alsa.c
drivers/media/v4l2-core/v4l2-compat-ioctl32.c
drivers/of/base.c
drivers/staging/media/dt3155v4l/dt3155v4l.c
drivers/staging/media/go7007/go7007-v4l2.c
drivers/staging/media/msi3101/sdr-msi3101.c
drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c

diff --cc CREDITS
Simple merge
Simple merge
diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 4557a142c7525b1405a70a8b4aff0db52058e082,89e888a78899e2b61281f7007406e5f937cc28a0..f72d19b7e5d29901471784f01e6b27909c772395
@@@ -2151,153 -1982,3 +2151,154 @@@ struct device_node *of_find_next_cache_
  
        return NULL;
  }
-       struct device_node *port = NULL;
 +
 +/**
 + * of_graph_parse_endpoint() - parse common endpoint node properties
 + * @node: pointer to endpoint device_node
 + * @endpoint: pointer to the OF endpoint data structure
 + *
 + * The caller should hold a reference to @node.
 + */
 +int of_graph_parse_endpoint(const struct device_node *node,
 +                          struct of_endpoint *endpoint)
 +{
 +      struct device_node *port_node = of_get_parent(node);
 +
 +      WARN_ONCE(!port_node, "%s(): endpoint %s has no parent node\n",
 +                __func__, node->full_name);
 +
 +      memset(endpoint, 0, sizeof(*endpoint));
 +
 +      endpoint->local_node = node;
 +      /*
 +       * It doesn't matter whether the two calls below succeed.
 +       * If they don't then the default value 0 is used.
 +       */
 +      of_property_read_u32(port_node, "reg", &endpoint->port);
 +      of_property_read_u32(node, "reg", &endpoint->id);
 +
 +      of_node_put(port_node);
 +
 +      return 0;
 +}
 +EXPORT_SYMBOL(of_graph_parse_endpoint);
 +
 +/**
 + * of_graph_get_next_endpoint() - get next endpoint node
 + * @parent: pointer to the parent device node
 + * @prev: previous endpoint node, or NULL to get first
 + *
 + * Return: An 'endpoint' node pointer with refcount incremented. Refcount
 + * of the passed @prev node is not decremented, the caller have to use
 + * of_node_put() on it when done.
 + */
 +struct device_node *of_graph_get_next_endpoint(const struct device_node *parent,
 +                                      struct device_node *prev)
 +{
 +      struct device_node *endpoint;
-               /*
-                * It's the first call, we have to find a port subnode
-                * within this node or within an optional 'ports' node.
-                */
++      struct device_node *port;
 +
 +      if (!parent)
 +              return NULL;
 +
++      /*
++       * Start by locating the port node. If no previous endpoint is specified
++       * search for the first port node, otherwise get the previous endpoint
++       * parent port node.
++       */
 +      if (!prev) {
 +              struct device_node *node;
-               if (port) {
-                       /* Found a port, get an endpoint. */
-                       endpoint = of_get_next_child(port, NULL);
-                       of_node_put(port);
-               } else {
-                       endpoint = NULL;
-               }
-               if (!endpoint)
-                       pr_err("%s(): no endpoint nodes specified for %s\n",
-                              __func__, parent->full_name);
++
 +              node = of_get_child_by_name(parent, "ports");
 +              if (node)
 +                      parent = node;
 +
 +              port = of_get_child_by_name(parent, "port");
-               return endpoint;
-       }
-       port = of_get_parent(prev);
-       if (WARN_ONCE(!port, "%s(): endpoint %s has no parent node\n",
-                     __func__, prev->full_name))
-               return NULL;
 +              of_node_put(node);
 +
-       /* Avoid dropping prev node refcount to 0. */
-       of_node_get(prev);
-       endpoint = of_get_next_child(port, prev);
-       if (endpoint) {
-               of_node_put(port);
-               return endpoint;
++              if (!port) {
++                      pr_err("%s(): no port node found in %s\n",
++                             __func__, parent->full_name);
++                      return NULL;
++              }
++      } else {
++              port = of_get_parent(prev);
++              if (WARN_ONCE(!port, "%s(): endpoint %s has no parent node\n",
++                            __func__, prev->full_name))
++                      return NULL;
 +
-       /* No more endpoints under this port, try the next one. */
-       do {
-               port = of_get_next_child(parent, port);
-               if (!port)
-                       return NULL;
-       } while (of_node_cmp(port->name, "port"));
++              /*
++               * Avoid dropping prev node refcount to 0 when getting the next
++               * child below.
++               */
++              of_node_get(prev);
 +      }
 +
-       /* Pick up the first endpoint in this port. */
-       endpoint = of_get_next_child(port, NULL);
-       of_node_put(port);
++      while (1) {
++              /*
++               * Now that we have a port node, get the next endpoint by
++               * getting the next child. If the previous endpoint is NULL this
++               * will return the first child.
++               */
++              endpoint = of_get_next_child(port, prev);
++              if (endpoint) {
++                      of_node_put(port);
++                      return endpoint;
++              }
 +
-       return endpoint;
++              /* No more endpoints under this port, try the next one. */
++              prev = NULL;
 +
++              do {
++                      port = of_get_next_child(parent, port);
++                      if (!port)
++                              return NULL;
++              } while (of_node_cmp(port->name, "port"));
++      }
 +}
 +EXPORT_SYMBOL(of_graph_get_next_endpoint);
 +
 +/**
 + * of_graph_get_remote_port_parent() - get remote port's parent node
 + * @node: pointer to a local endpoint device_node
 + *
 + * Return: Remote device node associated with remote endpoint node linked
 + *       to @node. Use of_node_put() on it when done.
 + */
 +struct device_node *of_graph_get_remote_port_parent(
 +                             const struct device_node *node)
 +{
 +      struct device_node *np;
 +      unsigned int depth;
 +
 +      /* Get remote endpoint node. */
 +      np = of_parse_phandle(node, "remote-endpoint", 0);
 +
 +      /* Walk 3 levels up only if there is 'ports' node. */
 +      for (depth = 3; depth && np; depth--) {
 +              np = of_get_next_parent(np);
 +              if (depth == 2 && of_node_cmp(np->name, "ports"))
 +                      break;
 +      }
 +      return np;
 +}
 +EXPORT_SYMBOL(of_graph_get_remote_port_parent);
 +
 +/**
 + * of_graph_get_remote_port() - get remote port node
 + * @node: pointer to a local endpoint device_node
 + *
 + * Return: Remote port node associated with remote endpoint node linked
 + *       to @node. Use of_node_put() on it when done.
 + */
 +struct device_node *of_graph_get_remote_port(const struct device_node *node)
 +{
 +      struct device_node *np;
 +
 +      /* Get remote endpoint node. */
 +      np = of_parse_phandle(node, "remote-endpoint", 0);
 +      if (!np)
 +              return NULL;
 +      return of_get_next_parent(np);
 +}
 +EXPORT_SYMBOL(of_graph_get_remote_port);
index 5a0400fdb98cc9aaca6df3ff903dc6a5e6732b93,011db2c08014ec917e313dd44c65a2cc8aa24348..260d1b7367212637a70e79ed4628f2025777b263
@@@ -411,7 -132,7 +132,7 @@@ struct msi3101_state 
        unsigned int vb_full; /* vb is full and packets dropped */
  
        struct urb *urbs[MAX_ISO_BUFS];
-       int (*convert_stream)(struct msi3101_state *s, u32 *dst, u8 *src,
 -      int (*convert_stream) (struct msi3101_state *s, u8 *dst, u8 *src,
++      int (*convert_stream)(struct msi3101_state *s, u8 *dst, u8 *src,
                        unsigned int src_len);
  
        /* Controls */