diff options
author | Xinyu Chen <xinyu.chen@freescale.com> | 2013-01-04 13:41:54 +0800 |
---|---|---|
committer | Xinyu Chen <xinyu.chen@freescale.com> | 2013-01-04 13:41:54 +0800 |
commit | ccce7dc63f494aaed6bd3ea55b9e14c76da0931e (patch) | |
tree | 6892e44aff8fda5dac08bb0aefa6a0d9b3b92af2 /drivers | |
parent | 60daab290bbab00c73cc057ff868f658ec73d304 (diff) | |
parent | c27cb3851bb6f822f8a92e4a1e10fba19284bdd4 (diff) |
Merge tag 'rel_imx_3.0.35_1.1.0' into imx_3.0.35_android
Conflicts:
drivers/mxc/vpu/mxc_vpu.c
drivers/usb/gadget/arcotg_udc.c
sound/soc/imx/imx-wm8962.c
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/video/mxc/capture/ipu_csi_enc.c | 2 | ||||
-rw-r--r-- | drivers/media/video/mxc/capture/ipu_prp_enc.c | 3 | ||||
-rw-r--r-- | drivers/media/video/mxc/capture/mxc_v4l2_capture.c | 2 | ||||
-rw-r--r-- | drivers/media/video/mxc/output/mxc_vout.c | 4 | ||||
-rw-r--r-- | drivers/mxc/asrc/mxc_asrc.c | 27 | ||||
-rw-r--r-- | drivers/mxc/vpu/mxc_vpu.c | 180 | ||||
-rwxr-xr-x | drivers/net/fec.c | 3 | ||||
-rwxr-xr-x | drivers/usb/gadget/arcotg_udc.c | 9 |
8 files changed, 115 insertions, 115 deletions
diff --git a/drivers/media/video/mxc/capture/ipu_csi_enc.c b/drivers/media/video/mxc/capture/ipu_csi_enc.c index b0919106a9bf..28c25f2cce34 100644 --- a/drivers/media/video/mxc/capture/ipu_csi_enc.c +++ b/drivers/media/video/mxc/capture/ipu_csi_enc.c @@ -104,6 +104,8 @@ static int csi_enc_setup(cam_data *cam) if (cam->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YUV420) pixel_fmt = IPU_PIX_FMT_YUV420P; + else if (cam->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YVU420) + pixel_fmt = IPU_PIX_FMT_YVU420P; else if (cam->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YUV422P) pixel_fmt = IPU_PIX_FMT_YUV422P; else if (cam->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_UYVY) diff --git a/drivers/media/video/mxc/capture/ipu_prp_enc.c b/drivers/media/video/mxc/capture/ipu_prp_enc.c index a3c90d53f2eb..e24b1b086d68 100644 --- a/drivers/media/video/mxc/capture/ipu_prp_enc.c +++ b/drivers/media/video/mxc/capture/ipu_prp_enc.c @@ -99,6 +99,9 @@ static int prp_enc_setup(cam_data *cam) if (cam->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YUV420) { enc.csi_prp_enc_mem.out_pixel_fmt = IPU_PIX_FMT_YUV420P; pr_info("YUV420\n"); + } else if (cam->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YVU420) { + enc.csi_prp_enc_mem.out_pixel_fmt = IPU_PIX_FMT_YVU420P; + pr_info("YVU420\n"); } else if (cam->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YUV422P) { enc.csi_prp_enc_mem.out_pixel_fmt = IPU_PIX_FMT_YUV422P; pr_info("YUV422P\n"); diff --git a/drivers/media/video/mxc/capture/mxc_v4l2_capture.c b/drivers/media/video/mxc/capture/mxc_v4l2_capture.c index 04aa0de4388b..a99cabbcee25 100644 --- a/drivers/media/video/mxc/capture/mxc_v4l2_capture.c +++ b/drivers/media/video/mxc/capture/mxc_v4l2_capture.c @@ -366,6 +366,7 @@ static inline int valid_mode(u32 palette) (palette == V4L2_PIX_FMT_UYVY) || (palette == V4L2_PIX_FMT_YUYV) || (palette == V4L2_PIX_FMT_YUV420) || + (palette == V4L2_PIX_FMT_YVU420) || (palette == V4L2_PIX_FMT_NV12)); } @@ -881,6 +882,7 @@ static int mxc_v4l2_s_fmt(cam_data *cam, struct v4l2_format *f) bytesperline = f->fmt.pix.width * 2; break; case V4L2_PIX_FMT_YUV420: + case V4L2_PIX_FMT_YVU420: size = f->fmt.pix.width * f->fmt.pix.height * 3 / 2; bytesperline = f->fmt.pix.width; break; diff --git a/drivers/media/video/mxc/output/mxc_vout.c b/drivers/media/video/mxc/output/mxc_vout.c index 388c4b39570f..ec789ec2e826 100644 --- a/drivers/media/video/mxc/output/mxc_vout.c +++ b/drivers/media/video/mxc/output/mxc_vout.c @@ -189,6 +189,10 @@ const static struct v4l2_fmtdesc mxc_formats[] = { .pixelformat = V4L2_PIX_FMT_YUV420, }, { + .description = "YVU420", + .pixelformat = V4L2_PIX_FMT_YVU420, + }, + { .description = "TILED NV12P", .pixelformat = IPU_PIX_FMT_TILED_NV12, }, diff --git a/drivers/mxc/asrc/mxc_asrc.c b/drivers/mxc/asrc/mxc_asrc.c index 4a17f5856d45..9962698473af 100644 --- a/drivers/mxc/asrc/mxc_asrc.c +++ b/drivers/mxc/asrc/mxc_asrc.c @@ -1213,33 +1213,6 @@ static int imx_asrc_dma_config( } -static int asrc_get_output_buffer_size(int input_buffer_size, - int input_sample_rate, - int output_sample_rate) -{ - int i = 0; - int outbuffer_size = 0; - int outsample = output_sample_rate; - while (outsample >= input_sample_rate) { - ++i; - outsample -= input_sample_rate; - } - outbuffer_size = i * input_buffer_size; - i = 1; - while (((input_buffer_size >> i) > 2) && (outsample != 0)) { - if (((outsample << 1) - input_sample_rate) >= 0) { - outsample = (outsample << 1) - input_sample_rate; - outbuffer_size += (input_buffer_size >> i); - } else { - outsample = outsample << 1; - } - i++; - } - outbuffer_size = (outbuffer_size >> 3) << 3; - return outbuffer_size; -} - - static int mxc_asrc_prepare_input_buffer(struct asrc_pair_params *params, struct asrc_convert_buffer *pbuf) { diff --git a/drivers/mxc/vpu/mxc_vpu.c b/drivers/mxc/vpu/mxc_vpu.c index 2a1b2cd0685c..3652e54f05cd 100644 --- a/drivers/mxc/vpu/mxc_vpu.c +++ b/drivers/mxc/vpu/mxc_vpu.c @@ -112,6 +112,7 @@ static int vpu_jpu_irq; static unsigned int regBk[64]; static struct regulator *vpu_regulator; +static unsigned int pc_before_suspend; #define READ_REG(x) __raw_readl(vpu_base + x) #define WRITE_REG(val, x) __raw_writel(val, vpu_base + x) @@ -716,9 +717,16 @@ static int vpu_dev_probe(struct platform_device *pdev) goto err_out_class; vpu_regulator = regulator_get(NULL, "cpu_vddvpu"); if (IS_ERR(vpu_regulator)) { - printk(KERN_ERR - "%s: failed to get vpu regulator\n", __func__); - goto err_out_class; + if (!(cpu_is_mx51() || cpu_is_mx53())) { + printk(KERN_ERR + "%s: failed to get vpu regulator\n", __func__); + goto err_out_class; + } else { + /* regulator_get will return error on MX5x, + * just igore it everywhere*/ + printk(KERN_WARNING + "%s: failed to get vpu regulator\n", __func__); + } } #ifdef MXC_VPU_HAS_JPU @@ -778,107 +786,112 @@ static int vpu_suspend(struct platform_device *pdev, pm_message_t state) int i; unsigned long timeout; - if (!IS_ERR(vpu_regulator)) - regulator_enable(vpu_regulator); - /* Wait for vpu go to idle state, suspect vpu cannot be changed - to idle state after about 1 sec */ - if (open_count > 0) { + mutex_lock(&vpu_data.lock); + if (open_count == 0) { + /* VPU is released (all instances are freed), + * clock is already off, context is no longer needed, + * power is already off on MX6, + * gate power on MX51 */ + if (cpu_is_mx51()) { + if (vpu_plat->pg) + vpu_plat->pg(1); + } + } else { + /* Wait for vpu go to idle state, suspect vpu cannot be changed + to idle state after about 1 sec */ timeout = jiffies + HZ; clk_enable(vpu_clk); while (READ_REG(BIT_BUSY_FLAG)) { msleep(1); - if (time_after(jiffies, timeout)) - goto out; + if (time_after(jiffies, timeout)) { + clk_disable(vpu_clk); + mutex_unlock(&vpu_data.lock); + return -EAGAIN; + } } clk_disable(vpu_clk); - } - /* Make sure clock is disabled before suspend */ - vpu_clk_usercount = clk_get_usecount(vpu_clk); - for (i = 0; i < vpu_clk_usercount; i++) - clk_disable(vpu_clk); + /* Make sure clock is disabled before suspend */ + vpu_clk_usercount = clk_get_usecount(vpu_clk); + for (i = 0; i < vpu_clk_usercount; i++) + clk_disable(vpu_clk); - if (cpu_is_mx53()) - return 0; + if (cpu_is_mx53()) { + mutex_unlock(&vpu_data.lock); + return 0; + } - if (bitwork_mem.cpu_addr != 0) { - clk_enable(vpu_clk); - /* Save 64 registers from BIT_CODE_BUF_ADDR */ - for (i = 0; i < 64; i++) - regBk[i] = READ_REG(BIT_CODE_BUF_ADDR + (i * 4)); - clk_disable(vpu_clk); - } + if (bitwork_mem.cpu_addr != 0) { + clk_enable(vpu_clk); + /* Save 64 registers from BIT_CODE_BUF_ADDR */ + for (i = 0; i < 64; i++) + regBk[i] = READ_REG(BIT_CODE_BUF_ADDR + (i * 4)); + pc_before_suspend = READ_REG(BIT_CUR_PC); + clk_disable(vpu_clk); + } - if (vpu_plat->pg) - vpu_plat->pg(1); + if (vpu_plat->pg) + vpu_plat->pg(1); - /* If VPU is working before suspend, disable - * regulator to make usecount right. */ - if (open_count > 0) { + /* If VPU is working before suspend, disable + * regulator to make usecount right. */ if (!IS_ERR(vpu_regulator)) regulator_disable(vpu_regulator); } - if (!IS_ERR(vpu_regulator)) - regulator_disable(vpu_regulator); + mutex_unlock(&vpu_data.lock); return 0; - -out: - clk_disable(vpu_clk); - if (!IS_ERR(vpu_regulator)) - regulator_disable(vpu_regulator); - return -EAGAIN; - } static int vpu_resume(struct platform_device *pdev) { int i; - if (cpu_is_mx53()) - goto recover_clk; - - if (!IS_ERR(vpu_regulator)) - regulator_enable(vpu_regulator); - if (vpu_plat->pg) - vpu_plat->pg(0); + mutex_lock(&vpu_data.lock); + if (open_count == 0) { + /* VPU is released (all instances are freed), + * clock should be kept off, context is no longer needed, + * power should be kept off on MX6, + * disable power gating on MX51 */ + if (cpu_is_mx51()) { + if (vpu_plat->pg) + vpu_plat->pg(0); + } + } else { + if (cpu_is_mx53()) + goto recover_clk; - /* If VPU is working before suspend, enable - * regulator to make usecount right. */ - if (open_count > 0) { + /* If VPU is working before suspend, enable + * regulator to make usecount right. */ if (!IS_ERR(vpu_regulator)) regulator_enable(vpu_regulator); - } - if (bitwork_mem.cpu_addr != 0) { - u32 *p = (u32 *) bitwork_mem.cpu_addr; - u32 data, pc; - u16 data_hi; - u16 data_lo; + if (vpu_plat->pg) + vpu_plat->pg(0); - clk_enable(vpu_clk); + if (bitwork_mem.cpu_addr != 0) { + u32 *p = (u32 *) bitwork_mem.cpu_addr; + u32 data, pc; + u16 data_hi; + u16 data_lo; - /* reset VPU in case of voltage change */ - if (vpu_plat->reset) - vpu_plat->reset(); + clk_enable(vpu_clk); - pc = READ_REG(BIT_CUR_PC); - if (pc) { - clk_disable(vpu_clk); - goto recover_clk; - } + pc = READ_REG(BIT_CUR_PC); + if (pc) { + printk(KERN_WARNING "Not power off after suspend (PC=0x%x)\n", pc); + clk_disable(vpu_clk); + goto recover_clk; + } - /* - * Only recover vpu if it is been using. - * If not been used, vpu will be reinited in user space lib. - */ - if (open_count > 0) { /* Restore registers */ for (i = 0; i < 64; i++) WRITE_REG(regBk[i], BIT_CODE_BUF_ADDR + (i * 4)); WRITE_REG(0x0, BIT_RESET_CTRL); WRITE_REG(0x0, BIT_CODE_RUN); + /* MX6 RTL has a bug not to init MBC_SET_SUBBLK_EN on reset */ + WRITE_REG(0x0, MBC_SET_SUBBLK_EN); /* * Re-load boot code, from the codebuffer in external RAM. @@ -890,32 +903,35 @@ static int vpu_resume(struct platform_device *pdev) data_lo = data & 0xFFFF; WRITE_REG((i << 16) | data_hi, BIT_CODE_DOWN); WRITE_REG(((i + 1) << 16) | data_lo, - BIT_CODE_DOWN); + BIT_CODE_DOWN); data = p[i / 2]; data_hi = (data >> 16) & 0xFFFF; data_lo = data & 0xFFFF; WRITE_REG(((i + 2) << 16) | data_hi, - BIT_CODE_DOWN); + BIT_CODE_DOWN); WRITE_REG(((i + 3) << 16) | data_lo, - BIT_CODE_DOWN); + BIT_CODE_DOWN); } - WRITE_REG(0x1, BIT_BUSY_FLAG); - WRITE_REG(0x1, BIT_CODE_RUN); - while (READ_REG(BIT_BUSY_FLAG)) - ; + if (pc_before_suspend) { + WRITE_REG(0x1, BIT_BUSY_FLAG); + WRITE_REG(0x1, BIT_CODE_RUN); + while (READ_REG(BIT_BUSY_FLAG)) + ; + } else { + printk(KERN_WARNING "PC=0 before suspend\n"); + } + clk_disable(vpu_clk); } - clk_disable(vpu_clk); - } recover_clk: - /* Recover vpu clock */ - for (i = 0; i < vpu_clk_usercount; i++) - clk_enable(vpu_clk); - if (!IS_ERR(vpu_regulator)) - regulator_disable(vpu_regulator); + /* Recover vpu clock */ + for (i = 0; i < vpu_clk_usercount; i++) + clk_enable(vpu_clk); + } + mutex_unlock(&vpu_data.lock); return 0; } #else diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 23f688c6a585..d09aa984c97e 100755 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c @@ -1046,6 +1046,9 @@ static int fec_enet_mii_probe(struct net_device *ndev) else phy_dev->supported &= PHY_BASIC_FEATURES; + /* enable phy pause frame for any platform */ + phy_dev->supported |= ADVERTISED_Pause; + phy_dev->advertising = phy_dev->supported; fep->phy_dev = phy_dev; diff --git a/drivers/usb/gadget/arcotg_udc.c b/drivers/usb/gadget/arcotg_udc.c index 61d7c237e881..5397efc61ddb 100755 --- a/drivers/usb/gadget/arcotg_udc.c +++ b/drivers/usb/gadget/arcotg_udc.c @@ -2911,6 +2911,7 @@ static void fsl_udc_release(struct device *dev) dma_free_coherent(dev, udc_controller->ep_qh_size, udc_controller->ep_qh, udc_controller->ep_qh_dma); kfree(udc_controller); + udc_controller = NULL; } /****************************************************************** @@ -3255,8 +3256,7 @@ static int fsl_udc_remove(struct platform_device *pdev) return -ENODEV; udc_controller->done = &done; /* open USB PHY clock */ - if (udc_controller->stopped) - dr_clk_gate(true); + dr_clk_gate(true); /* disable wake up and otgsc interrupt for safely remove udc driver*/ temp = fsl_readl(&dr_regs->otgsc); @@ -3296,7 +3296,7 @@ static int fsl_udc_remove(struct platform_device *pdev) release_mem_region(res->start, resource_size(res)); } #endif - + dr_clk_gate(false); device_unregister(&udc_controller->gadget.dev); /* free udc --wait for the release() finished */ wait_for_completion(&done); @@ -3307,9 +3307,6 @@ static int fsl_udc_remove(struct platform_device *pdev) if (pdata->exit) pdata->exit(pdata->pdev); - if (udc_controller->stopped) - dr_clk_gate(false); - return 0; } |