Merge tag 'v3.8-rc3' into v4l_for_linus
authorMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 11 Jan 2013 15:28:19 +0000 (13:28 -0200)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 11 Jan 2013 15:28:19 +0000 (13:28 -0200)
Linux 3.8-rc3

* tag 'v3.8-rc3': (11110 commits)
  Linux 3.8-rc3
  mm: reinstante dropped pmd_trans_splitting() check
  cred: Remove tgcred pointer from struct cred
  drm/ttm: fix fence locking in ttm_buffer_object_transfer
  ARM: clps711x: Fix bad merge of clockevents setup
  ARM: highbank: save and restore L2 cache and GIC on suspend
  ARM: highbank: add a power request clear
  ARM: highbank: fix secondary boot and hotplug
  ARM: highbank: fix typos with hignbank in power request functions
  ARM: dts: fix highbank cpu mpidr values
  ARM: dts: add device_type prop to cpu nodes on Calxeda platforms
  drm/prime: drop reference on imported dma-buf come from gem
  xen/netfront: improve truesize tracking
  ARM: mx5: Fix MX53 flexcan2 clock
  ARM: OMAP2+: am33xx-hwmod: Fix wrongly terminated am33xx_usbss_mpu_irqs array
  sctp: fix Kconfig bug in default cookie hmac selection
  EDAC: Cleanup device deregistering path
  EDAC: Fix EDAC Kconfig menu
  EDAC: Fix kernel panic on module unloading
  ALSA: hda - add mute LED for HP Pavilion 17 (Realtek codec)
  ...

1  2 
drivers/media/i2c/m5mols/m5mols_core.c
drivers/media/platform/omap3isp/ispvideo.c
drivers/media/platform/s5p-fimc/fimc-mdevice.c
drivers/media/platform/s5p-mfc/s5p_mfc.c

@@@ -556,7 -556,7 +556,7 @@@ static int m5mols_get_fmt(struct v4l2_s
        mutex_lock(&info->lock);
  
        format = __find_format(info, fh, fmt->which, info->res_type);
 -      if (!format)
 +      if (format)
                fmt->format = *format;
        else
                ret = -EINVAL;
@@@ -926,8 -926,8 +926,8 @@@ static irqreturn_t m5mols_irq_handler(i
        return IRQ_HANDLED;
  }
  
- static int __devinit m5mols_probe(struct i2c_client *client,
-                                 const struct i2c_device_id *id)
+ static int m5mols_probe(struct i2c_client *client,
+                       const struct i2c_device_id *id)
  {
        const struct m5mols_platform_data *pdata = client->dev.platform_data;
        struct m5mols_info *info;
@@@ -1018,7 -1018,7 +1018,7 @@@ out_free
        return ret;
  }
  
- static int __devexit m5mols_remove(struct i2c_client *client)
+ static int m5mols_remove(struct i2c_client *client)
  {
        struct v4l2_subdev *sd = i2c_get_clientdata(client);
        struct m5mols_info *info = to_m5mols(sd);
@@@ -1045,7 -1045,7 +1045,7 @@@ static struct i2c_driver m5mols_i2c_dri
                .name   = MODULE_NAME,
        },
        .probe          = m5mols_probe,
-       .remove         = __devexit_p(m5mols_remove),
+       .remove         = m5mols_remove,
        .id_table       = m5mols_id,
  };
  
@@@ -27,6 -27,7 +27,7 @@@
  #include <linux/clk.h>
  #include <linux/mm.h>
  #include <linux/module.h>
+ #include <linux/omap-iommu.h>
  #include <linux/pagemap.h>
  #include <linux/scatterlist.h>
  #include <linux/sched.h>
@@@ -34,6 -35,9 +35,6 @@@
  #include <linux/vmalloc.h>
  #include <media/v4l2-dev.h>
  #include <media/v4l2-ioctl.h>
 -#include <plat/iommu.h>
 -#include <plat/iovmm.h>
 -#include <plat/omap-pm.h>
  
  #include "ispvideo.h"
  #include "isp.h"
@@@ -593,7 -593,7 +593,7 @@@ static int __fimc_md_create_flite_sourc
  {
        struct media_entity *source, *sink;
        unsigned int flags = MEDIA_LNK_FL_ENABLED;
 -      int i, ret;
 +      int i, ret = 0;
  
        for (i = 0; i < FIMC_LITE_MAX_DEVS; i++) {
                struct fimc_lite *fimc = fmd->fimc_lite[i];
@@@ -1000,7 -1000,7 +1000,7 @@@ err_md
        return ret;
  }
  
- static int __devexit fimc_md_remove(struct platform_device *pdev)
+ static int fimc_md_remove(struct platform_device *pdev)
  {
        struct fimc_md *fmd = platform_get_drvdata(pdev);
  
  
  static struct platform_driver fimc_md_driver = {
        .probe          = fimc_md_probe,
-       .remove         = __devexit_p(fimc_md_remove),
+       .remove         = fimc_md_remove,
        .driver = {
                .name   = "s5p-fimc-md",
                .owner  = THIS_MODULE,
@@@ -412,48 -412,62 +412,48 @@@ leave_handle_frame
  }
  
  /* Error handling for interrupt */
 -static void s5p_mfc_handle_error(struct s5p_mfc_ctx *ctx,
 -                               unsigned int reason, unsigned int err)
 +static void s5p_mfc_handle_error(struct s5p_mfc_dev *dev,
 +              struct s5p_mfc_ctx *ctx, unsigned int reason, unsigned int err)
  {
 -      struct s5p_mfc_dev *dev;
        unsigned long flags;
  
 -      /* If no context is available then all necessary
 -       * processing has been done. */
 -      if (ctx == NULL)
 -              return;
 -
 -      dev = ctx->dev;
        mfc_err("Interrupt Error: %08x\n", err);
 -      s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
 -      wake_up_dev(dev, reason, err);
  
 -      /* Error recovery is dependent on the state of context */
 -      switch (ctx->state) {
 -      case MFCINST_INIT:
 -              /* This error had to happen while acquireing instance */
 -      case MFCINST_GOT_INST:
 -              /* This error had to happen while parsing the header */
 -      case MFCINST_HEAD_PARSED:
 -              /* This error had to happen while setting dst buffers */
 -      case MFCINST_RETURN_INST:
 -              /* This error had to happen while releasing instance */
 -              clear_work_bit(ctx);
 -              wake_up_ctx(ctx, reason, err);
 -              if (test_and_clear_bit(0, &dev->hw_lock) == 0)
 -                      BUG();
 -              s5p_mfc_clock_off();
 -              ctx->state = MFCINST_ERROR;
 -              break;
 -      case MFCINST_FINISHING:
 -      case MFCINST_FINISHED:
 -      case MFCINST_RUNNING:
 -              /* It is higly probable that an error occured
 -               * while decoding a frame */
 -              clear_work_bit(ctx);
 -              ctx->state = MFCINST_ERROR;
 -              /* Mark all dst buffers as having an error */
 -              spin_lock_irqsave(&dev->irqlock, flags);
 -              s5p_mfc_hw_call(dev->mfc_ops, cleanup_queue, &ctx->dst_queue,
 -                              &ctx->vq_dst);
 -              /* Mark all src buffers as having an error */
 -              s5p_mfc_hw_call(dev->mfc_ops, cleanup_queue, &ctx->src_queue,
 -                              &ctx->vq_src);
 -              spin_unlock_irqrestore(&dev->irqlock, flags);
 -              if (test_and_clear_bit(0, &dev->hw_lock) == 0)
 -                      BUG();
 -              s5p_mfc_clock_off();
 -              break;
 -      default:
 -              mfc_err("Encountered an error interrupt which had not been handled\n");
 -              break;
 +      if (ctx != NULL) {
 +              /* Error recovery is dependent on the state of context */
 +              switch (ctx->state) {
 +              case MFCINST_RES_CHANGE_INIT:
 +              case MFCINST_RES_CHANGE_FLUSH:
 +              case MFCINST_RES_CHANGE_END:
 +              case MFCINST_FINISHING:
 +              case MFCINST_FINISHED:
 +              case MFCINST_RUNNING:
 +                      /* It is higly probable that an error occured
 +                       * while decoding a frame */
 +                      clear_work_bit(ctx);
 +                      ctx->state = MFCINST_ERROR;
 +                      /* Mark all dst buffers as having an error */
 +                      spin_lock_irqsave(&dev->irqlock, flags);
 +                      s5p_mfc_hw_call(dev->mfc_ops, cleanup_queue,
 +                                              &ctx->dst_queue, &ctx->vq_dst);
 +                      /* Mark all src buffers as having an error */
 +                      s5p_mfc_hw_call(dev->mfc_ops, cleanup_queue,
 +                                              &ctx->src_queue, &ctx->vq_src);
 +                      spin_unlock_irqrestore(&dev->irqlock, flags);
 +                      wake_up_ctx(ctx, reason, err);
 +                      break;
 +              default:
 +                      clear_work_bit(ctx);
 +                      ctx->state = MFCINST_ERROR;
 +                      wake_up_ctx(ctx, reason, err);
 +                      break;
 +              }
        }
 +      if (test_and_clear_bit(0, &dev->hw_lock) == 0)
 +              BUG();
 +      s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
 +      s5p_mfc_clock_off();
 +      wake_up_dev(dev, reason, err);
        return;
  }
  
@@@ -618,7 -632,7 +618,7 @@@ static irqreturn_t s5p_mfc_irq(int irq
                                dev->warn_start)
                        s5p_mfc_handle_frame(ctx, reason, err);
                else
 -                      s5p_mfc_handle_error(ctx, reason, err);
 +                      s5p_mfc_handle_error(dev, ctx, reason, err);
                clear_bit(0, &dev->enter_suspend);
                break;
  
@@@ -1189,7 -1203,7 +1189,7 @@@ err_res
  }
  
  /* Remove the driver */
- static int __devexit s5p_mfc_remove(struct platform_device *pdev)
+ static int s5p_mfc_remove(struct platform_device *pdev)
  {
        struct s5p_mfc_dev *dev = platform_get_drvdata(pdev);
  
@@@ -1354,7 -1368,7 +1354,7 @@@ MODULE_DEVICE_TABLE(platform, mfc_drive
  
  static struct platform_driver s5p_mfc_driver = {
        .probe          = s5p_mfc_probe,
-       .remove         = __devexit_p(s5p_mfc_remove),
+       .remove         = s5p_mfc_remove,
        .id_table       = mfc_driver_ids,
        .driver = {
                .name   = S5P_MFC_NAME,