diff options
author | Nitin Kumbhar <nkumbhar@nvidia.com> | 2011-02-04 17:08:18 +0530 |
---|---|---|
committer | Nitin Kumbhar <nkumbhar@nvidia.com> | 2011-02-04 17:08:18 +0530 |
commit | b6b1f33f279fcb1c4a751f981153affa6469e94c (patch) | |
tree | a77ace4c91f29d814982c40bea8c4a172af9ee3e /arch/arm | |
parent | df4a2fbff8471de3f75d55b93e2bf94dfd26ff7e (diff) | |
parent | a979d00287bcd3297bd13a59534073e6faa570c9 (diff) |
merging android-tegra-2.6.36 into git-master/linux-2.6/android-tegra-2.6.36
Conflicts:
arch/arm/mach-tegra/include/mach/dc.h
drivers/video/tegra/dc/hdmi.c
drivers/video/tegra/host/nvhost_acm.c
Change-Id: Iddf74984cc02f08dca3738967c0580ba7c375337
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 3 | ||||
-rw-r--r-- | arch/arm/mach-tegra/include/mach/dc.h | 10 | ||||
-rw-r--r-- | arch/arm/mach-tegra/tegra_i2s_audio.c | 37 | ||||
-rw-r--r-- | arch/arm/mach-tegra/usb_phy.c | 11 | ||||
-rw-r--r-- | arch/arm/vfp/entry.S | 3 |
5 files changed, 43 insertions, 21 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index e572d24d018d..44cb9db8dd50 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -506,8 +506,7 @@ __und_usr: blo __und_usr_unknown 3: ldrht r0, [r4] add r2, r2, #2 @ r2 is PC + 2, make it PC + 4 - str r2, [sp, #S_PC] @ it's a 2x16bit instr, update - orr r0, r0, r5, lsl #16 @ regs->ARM_pc + orr r0, r0, r5, lsl #16 #else b __und_usr_unknown #endif diff --git a/arch/arm/mach-tegra/include/mach/dc.h b/arch/arm/mach-tegra/include/mach/dc.h index b4453f4c2ac3..1dc9c556d6fa 100644 --- a/arch/arm/mach-tegra/include/mach/dc.h +++ b/arch/arm/mach-tegra/include/mach/dc.h @@ -38,8 +38,12 @@ struct tegra_dc_mode { int h_front_porch; int v_front_porch; int stereo_mode; + u32 flags; }; +#define TEGRA_DC_MODE_FLAG_NEG_V_SYNC (1 << 0) +#define TEGRA_DC_MODE_FLAG_NEG_H_SYNC (1 << 1) + enum { TEGRA_DC_OUT_RGB, TEGRA_DC_OUT_HDMI, @@ -84,6 +88,9 @@ struct tegra_dc_out { unsigned depth; unsigned dither; + unsigned height; /* mm */ + unsigned width; /* mm */ + struct tegra_dc_mode *modes; int n_modes; @@ -214,4 +221,7 @@ int tegra_dc_sync_windows(struct tegra_dc_win *windows[], int n); int tegra_dc_set_mode(struct tegra_dc *dc, const struct tegra_dc_mode *mode); +unsigned tegra_dc_get_out_height(struct tegra_dc *dc); +unsigned tegra_dc_get_out_width(struct tegra_dc *dc); + #endif diff --git a/arch/arm/mach-tegra/tegra_i2s_audio.c b/arch/arm/mach-tegra/tegra_i2s_audio.c index 45e4cc5ee6f4..1bae833f4f2a 100644 --- a/arch/arm/mach-tegra/tegra_i2s_audio.c +++ b/arch/arm/mach-tegra/tegra_i2s_audio.c @@ -611,15 +611,15 @@ static int i2s_configure(struct platform_device *pdev) static int init_stream_buffer(struct audio_stream *, int); -static int setup_dma(struct audio_driver_state *); -static void tear_down_dma(struct audio_driver_state *); +static int setup_dma(struct audio_driver_state *, int); +static void tear_down_dma(struct audio_driver_state *, int); static void stop_dma_playback(struct audio_stream *); static int start_dma_recording(struct audio_stream *, int); static void stop_dma_recording(struct audio_stream *); struct sound_ops { - int (*setup)(struct audio_driver_state *); - void (*tear_down)(struct audio_driver_state *); + int (*setup)(struct audio_driver_state *, int); + void (*tear_down)(struct audio_driver_state *, int); void (*stop_playback)(struct audio_stream *); int (*start_recording)(struct audio_stream *, int); void (*stop_recording)(struct audio_stream *); @@ -716,12 +716,12 @@ static void setup_dma_tx_request(struct tegra_dma_req *req, static void setup_dma_rx_request(struct tegra_dma_req *req, struct audio_stream *ais); -static int setup_dma(struct audio_driver_state *ads) +static int setup_dma(struct audio_driver_state *ads, int mask) { int rc, i; pr_info("%s\n", __func__); - if ((ads->pdata->mask & TEGRA_AUDIO_ENABLE_TX)) { + if (mask & TEGRA_AUDIO_ENABLE_TX) { /* setup audio playback */ for (i = 0; i < ads->out.num_bufs; i++) { ads->out.buf_phy[i] = dma_map_single(&ads->pdev->dev, @@ -742,7 +742,7 @@ static int setup_dma(struct audio_driver_state *ads) } } - if ((ads->pdata->mask & TEGRA_AUDIO_ENABLE_RX)) { + if (mask & TEGRA_AUDIO_ENABLE_RX) { /* setup audio recording */ for (i = 0; i < ads->in.num_bufs; i++) { ads->in.buf_phy[i] = dma_map_single(&ads->pdev->dev, @@ -766,7 +766,7 @@ static int setup_dma(struct audio_driver_state *ads) return 0; fail_rx: - if (ads->pdata->mask & TEGRA_AUDIO_ENABLE_RX) { + if (mask & TEGRA_AUDIO_ENABLE_RX) { for (i = 0; i < ads->in.num_bufs; i++) { dma_unmap_single(&ads->pdev->dev, ads->in.buf_phy[i], 1 << PCM_BUFFER_MAX_SIZE_ORDER, @@ -777,7 +777,7 @@ fail_rx: ads->in.dma_chan = 0; } fail_tx: - if (ads->pdata->mask & TEGRA_AUDIO_ENABLE_TX) { + if (mask & TEGRA_AUDIO_ENABLE_TX) { for (i = 0; i < ads->out.num_bufs; i++) { dma_unmap_single(&ads->pdev->dev, ads->out.buf_phy[i], 1 << PCM_BUFFER_MAX_SIZE_ORDER, @@ -791,12 +791,12 @@ fail_tx: return rc; } -static void tear_down_dma(struct audio_driver_state *ads) +static void tear_down_dma(struct audio_driver_state *ads, int mask) { int i; pr_info("%s\n", __func__); - if (ads->pdata->mask & TEGRA_AUDIO_ENABLE_TX) { + if (mask & TEGRA_AUDIO_ENABLE_TX) { tegra_dma_free_channel(ads->out.dma_chan); for (i = 0; i < ads->out.num_bufs; i++) { dma_unmap_single(&ads->pdev->dev, ads->out.buf_phy[i], @@ -807,7 +807,7 @@ static void tear_down_dma(struct audio_driver_state *ads) } ads->out.dma_chan = NULL; - if (ads->pdata->mask & TEGRA_AUDIO_ENABLE_RX) { + if (mask & TEGRA_AUDIO_ENABLE_RX) { tegra_dma_free_channel(ads->in.dma_chan); for (i = 0; i < ads->in.num_bufs; i++) { dma_unmap_single(&ads->pdev->dev, ads->in.buf_phy[i], @@ -1122,7 +1122,9 @@ static long tegra_audio_out_ioctl(struct file *file, if (rc < 0) break; aos->num_bufs = num; - sound_ops->setup(ads); + sound_ops->tear_down(ads, TEGRA_AUDIO_ENABLE_TX); + sound_ops->setup(ads, TEGRA_AUDIO_ENABLE_TX); + pr_debug("%s: num buf set to %d\n", __func__, num); } break; case TEGRA_AUDIO_OUT_GET_NUM_BUFS: @@ -1187,9 +1189,9 @@ static long tegra_audio_ioctl(struct file *file, rc = -EBUSY; goto done; } - sound_ops->tear_down(ads); + sound_ops->tear_down(ads, ads->pdata->mask); i2s_configure(ads->pdev); - sound_ops->setup(ads); + sound_ops->setup(ads, ads->pdata->mask); } done: @@ -1277,7 +1279,8 @@ static long tegra_audio_in_ioctl(struct file *file, if (rc < 0) break; ais->num_bufs = num; - sound_ops->setup(ads); + sound_ops->tear_down(ads, TEGRA_AUDIO_ENABLE_RX); + sound_ops->setup(ads, TEGRA_AUDIO_ENABLE_RX); } break; case TEGRA_AUDIO_IN_GET_NUM_BUFS: @@ -1897,7 +1900,7 @@ static int tegra_audio_probe(struct platform_device *pdev) if (rc < 0) return rc; - sound_ops->setup(state); + sound_ops->setup(state, state->pdata->mask); rc = device_create_file(&pdev->dev, &dev_attr_dma_toggle); if (rc < 0) { diff --git a/arch/arm/mach-tegra/usb_phy.c b/arch/arm/mach-tegra/usb_phy.c index 9030545d4bdc..9e809253170f 100644 --- a/arch/arm/mach-tegra/usb_phy.c +++ b/arch/arm/mach-tegra/usb_phy.c @@ -157,7 +157,7 @@ #define UTMIP_PD_CHRG (1 << 0) #define UTMIP_SPARE_CFG0 0x834 -#define FUSE_SETUP_SEL (1 << 3); +#define FUSE_SETUP_SEL (1 << 3) #define UTMIP_XCVR_CFG1 0x838 #define UTMIP_FORCE_PDDISC_POWERDOWN (1 << 0) @@ -442,6 +442,15 @@ static void utmi_phy_power_on(struct tegra_usb_phy *phy) val |= UTMIP_BIAS_PDTRK_COUNT(0x5); writel(val, base + UTMIP_BIAS_CFG1); + if (phy->instance == 0) { + val = readl(base + UTMIP_SPARE_CFG0); + if (phy->mode == TEGRA_USB_PHY_MODE_DEVICE) + val &= ~FUSE_SETUP_SEL; + else + val |= FUSE_SETUP_SEL; + writel(val, base + UTMIP_SPARE_CFG0); + } + if (phy->instance == 2) { val = readl(base + USB_SUSP_CTRL); val |= UTMIP_PHY_ENABLE; diff --git a/arch/arm/vfp/entry.S b/arch/arm/vfp/entry.S index 4fa9903b83cf..c1a978402583 100644 --- a/arch/arm/vfp/entry.S +++ b/arch/arm/vfp/entry.S @@ -10,7 +10,7 @@ * * Basic entry code, called from the kernel's undefined instruction trap. * r0 = faulted instruction - * r5 = faulted PC+4 + * r2 = faulted PC+4 * r9 = successful return * r10 = thread_info structure * lr = failure return @@ -26,6 +26,7 @@ ENTRY(do_vfp) str r11, [r10, #TI_PREEMPT] #endif enable_irq + str r2, [sp, #S_PC] @ update regs->ARM_pc for Thumb 2 case ldr r4, .LCvfp ldr r11, [r10, #TI_CPU] @ CPU number add r10, r10, #TI_VFPSTATE @ r10 = workspace |