diff options
author | Xinyu Chen <xinyu.chen@freescale.com> | 2012-03-30 11:36:25 +0800 |
---|---|---|
committer | Xinyu Chen <xinyu.chen@freescale.com> | 2012-03-30 11:36:25 +0800 |
commit | 88f08b421c91f2d4db3a110e5e3a86d64e2b40c9 (patch) | |
tree | e3af9f0bf2a355fd69119ae9b680371d39012a2d /include | |
parent | 6cf2f136f3df6fad82ddabd89d93c53181564274 (diff) | |
parent | f53c766e85d69add6a26d6f3e233dec6dc98de1e (diff) |
Merge remote branch 'fsl-linux-sdk/imx_3.0.15' into imx_3.0.15_4.6.6
Conflicts:
arch/arm/configs/imx6_defconfig
arch/arm/configs/imx6_updater_defconfig
arch/arm/mach-mx6/board-mx6q_sabreauto.c
arch/arm/mach-mx6/board-mx6q_sabresd.c
arch/arm/mach-mx6/clock.c
arch/arm/mach-mx6/localtimer.c
drivers/cpufreq/Makefile
drivers/cpufreq/cpufreq_interactive.c
drivers/input/keyboard/gpio_keys.c
drivers/media/video/mxc/capture/Kconfig
drivers/media/video/mxc/capture/mxc_v4l2_capture.c
drivers/mmc/card/block.c
drivers/mmc/host/sdhci-esdhc-imx.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
drivers/usb/otg/fsl_otg.c
drivers/video/mxc/mxc_ipuv3_fb.c
include/linux/fsl_devices.h
include/linux/mmc/host.h
sound/soc/imx/Kconfig
sound/soc/imx/Makefile
sound/soc/imx/imx-hdmi-dma.c
sound/soc/imx/imx-wm8958.c
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/cpu.h | 1 | ||||
-rw-r--r-- | include/linux/cpufreq.h | 12 | ||||
-rw-r--r-- | include/linux/fsl_devices.h | 14 | ||||
-rw-r--r-- | include/linux/mfd/pfuze.h | 4 | ||||
-rw-r--r-- | include/linux/mmc/core.h | 7 | ||||
-rw-r--r-- | include/linux/mmc/host.h | 23 | ||||
-rw-r--r-- | include/linux/mmc/sdhci.h | 9 | ||||
-rw-r--r-- | include/linux/mxc_asrc.h | 30 | ||||
-rw-r--r-- | include/linux/mxcfb.h | 11 | ||||
-rw-r--r-- | include/linux/mxcfb_epdc_kernel.h | 6 |
10 files changed, 106 insertions, 11 deletions
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 97f1ca76b4aa..7681360ba60c 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h @@ -163,6 +163,7 @@ static inline void cpu_hotplug_driver_unlock(void) #endif /* CONFIG_HOTPLUG_CPU */ #ifdef CONFIG_PM_SLEEP_SMP + extern int suspend_cpu_hotplug; extern int disable_nonboot_cpus(void); diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index ae06dc9a0cda..a61416fe63f2 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -68,6 +68,18 @@ struct cpufreq_governor; /* /sys/devices/system/cpu/cpufreq: entry point for global variables */ extern struct kobject *cpufreq_global_kobject; +/* For some peripheral devices, which will generate irq very frequently + * and take very short time to handle irq, in this scenario, CPUFreq will + * not issue cpu freq change, but the devices' performance will be impacted + * significantly, we need to add irq number check to be as one condition of + * CPU freq change. */ +#define MAX_CPUFREQ_IRQ_NUMBER 10 +struct irq_tuner { + unsigned int irq_number; + unsigned int up_threshold; + bool enable; +}; + #define CPUFREQ_ETERNAL (-1) struct cpufreq_cpuinfo { unsigned int max_freq; diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h index 63c4407fc51f..ba66c938ae0a 100644 --- a/include/linux/fsl_devices.h +++ b/include/linux/fsl_devices.h @@ -130,6 +130,11 @@ struct fsl_usb2_platform_data { * is disconnected with Host. */ void (*dr_discharge_line) (bool); + /* only set it when vbus lower very slow during OTG switch */ + bool need_discharge_vbus; + void (*platform_rh_suspend)(struct fsl_usb2_platform_data *); + void (*platform_rh_resume)(struct fsl_usb2_platform_data *); + void (*platform_set_disconnect_det)(struct fsl_usb2_platform_data *, bool); struct fsl_usb2_wakeup_platform_data *wakeup_pdata; struct platform_device *pdev; @@ -137,7 +142,7 @@ struct fsl_usb2_platform_data { unsigned ahb_burst_mode:3; unsigned lowpower:1; unsigned irq_delay:1; - unsigned wakeup_event:1; + enum usb_wakeup_event wakeup_event; u32 pmflags; /* PM from otg or system */ /* register save area for suspend/resume */ @@ -353,7 +358,6 @@ struct mxc_audio_platform_data { int hp_active_low; /* headphone irq is active loaw */ int sysclk; - int rst_gpio; const char *codec_name; int (*init) (void); /* board specific init */ @@ -363,6 +367,12 @@ struct mxc_audio_platform_data { void *priv; /* used by board specific functions */ }; +/* Generic parameters for audio codecs + */ +struct mxc_audio_codec_platform_data { + int rates; /* codec platform data */ +}; + struct mxc_pwm_platform_data { int pwmo_invert; void (*enable_pwm_pad) (void); diff --git a/include/linux/mfd/pfuze.h b/include/linux/mfd/pfuze.h index 38c4e24740ec..92e34afcd71f 100644 --- a/include/linux/mfd/pfuze.h +++ b/include/linux/mfd/pfuze.h @@ -87,8 +87,8 @@ unsigned int pfuze_get_flags(struct mc_pfuze *mc_pfuze); #define PFUZE100_VGEN6 15 #define PFUZE100_SW2_VOL6 1 #define PFUZE100_SW3_VOL6 0 -#define PFUZE100_SW4_VOL6 0 -#define PFUZE100_FIRST_VERSION +#define PFUZE100_SW4_VOL6 1 +/*#define PFUZE100_FIRST_VERSION*/ struct regulator_init_data; struct pfuze_regulator_init_data { diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index b6718e549a51..1b1d92dff892 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h @@ -117,6 +117,7 @@ struct mmc_data { unsigned int sg_len; /* size of scatter list */ struct scatterlist *sg; /* I/O scatter list */ + s32 host_cookie; /* host private data */ }; struct mmc_request { @@ -125,13 +126,16 @@ struct mmc_request { struct mmc_data *data; struct mmc_command *stop; - void *done_data; /* completion data */ + struct completion completion; void (*done)(struct mmc_request *);/* completion function */ }; struct mmc_host; struct mmc_card; +struct mmc_async_req; +extern struct mmc_async_req *mmc_start_req(struct mmc_host *, + struct mmc_async_req *, int *); extern void mmc_wait_for_req(struct mmc_host *, struct mmc_request *); extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int); extern int mmc_app_cmd(struct mmc_host *, struct mmc_card *); @@ -155,6 +159,7 @@ extern int mmc_can_trim(struct mmc_card *card); extern int mmc_can_secure_erase_trim(struct mmc_card *card); extern int mmc_erase_group_aligned(struct mmc_card *card, unsigned int from, unsigned int nr); +extern unsigned int mmc_calc_max_discard(struct mmc_card *card); extern int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen); diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 3fd740e921aa..08ff27886af6 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -76,6 +76,7 @@ struct mmc_ios { #define MMC_SET_DRIVER_TYPE_C 2 #define MMC_SET_DRIVER_TYPE_D 3 unsigned int tuning_flag; /* request tuning only */ + unsigned int finish_tuning_flag; unsigned int tuning; /* tuning parameter */ }; @@ -109,6 +110,15 @@ struct mmc_host_ops { */ int (*enable)(struct mmc_host *host); int (*disable)(struct mmc_host *host, int lazy); + /* + * It is optional for the host to implement pre_req and post_req in + * order to support double buffering of requests (prepare one + * request while another request is active). + */ + void (*post_req)(struct mmc_host *host, struct mmc_request *req, + int err); + void (*pre_req)(struct mmc_host *host, struct mmc_request *req, + bool is_first_req); void (*request)(struct mmc_host *host, struct mmc_request *req); /* * Avoid calling these three functions too often or in a "fast path", @@ -147,6 +157,16 @@ struct mmc_host_ops { struct mmc_card; struct device; +struct mmc_async_req { + /* active mmc request */ + struct mmc_request *mrq; + /* + * Check error status of completed mmc request. + * Returns 0 if success otherwise non zero. + */ + int (*err_check) (struct mmc_card *, struct mmc_async_req *); +}; + struct mmc_host { struct device *parent; struct device class_dev; @@ -237,6 +257,8 @@ struct mmc_host { unsigned int tuning_min; unsigned int tuning_max; unsigned int tuning_step; + unsigned int max_discard_to; /* max. discard timeout in ms */ + /* private data */ spinlock_t lock; /* lock for claim and bus ops */ @@ -299,6 +321,7 @@ struct mmc_host { int num_funcs; } embedded_sdio_data; #endif + struct mmc_async_req *areq; /* active async req */ unsigned long private[0] ____cacheline_aligned; }; diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h index d73ed4622881..a477e2e2093c 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h @@ -17,6 +17,11 @@ #include <linux/io.h> #include <linux/mmc/host.h> +struct sdhci_host_next { + unsigned int dma_len; + s32 cookie; +}; + struct sdhci_host { /* Data set by hardware interface driver */ const char *hw_name; /* Hardware bus name */ @@ -88,6 +93,9 @@ struct sdhci_host { /* The read-only detection via SDHCI_PRESENT_STATE register is unstable */ #define SDHCI_QUIRK_UNSTABLE_RO_DETECT (1<<31) + unsigned int quirks2; /* More deviations from spec. */ +#define SDHCI_QUIRK_BROKEN_AUTO_CMD23 (1<<0) + int irq; /* Device IRQ */ void __iomem *ioaddr; /* Mapped address */ @@ -166,6 +174,7 @@ struct sdhci_host { struct delayed_work clk_worker; /* Clock delayed worker */ unsigned int clk_mgr_en; unsigned int clk_status; + struct sdhci_host_next next_data; unsigned long private[0] ____cacheline_aligned; }; #endif /* __SDHCI_H */ diff --git a/include/linux/mxc_asrc.h b/include/linux/mxc_asrc.h index a8d8b8bc474a..6de6a7e3cd86 100644 --- a/include/linux/mxc_asrc.h +++ b/include/linux/mxc_asrc.h @@ -1,5 +1,5 @@ /* - * Copyright 2008-2011 Freescale Semiconductor, Inc. All Rights Reserved. + * Copyright 2008-2012 Freescale Semiconductor, Inc. All Rights Reserved. */ /* @@ -128,7 +128,9 @@ enum asrc_error_status { #ifdef __KERNEL__ -#define ASRC_DMA_BUFFER_NUM 8 +#define ASRC_DMA_BUFFER_NUM 2 +#define ASRC_INPUTFIFO_THRESHOLD 32 +#define ASRC_OUTPUTFIFO_THRESHOLD 32 #define ASRC_ASRCTR_REG 0x00 #define ASRC_ASRIER_REG 0x04 @@ -162,6 +164,13 @@ enum asrc_error_status { #define ASRC_ASRIDRLC_REG 0x94 #define ASRC_ASR76K_REG 0x98 #define ASRC_ASR56K_REG 0x9C +#define ASRC_ASRMCRA_REG 0xA0 +#define ASRC_ASRFSTA_REG 0xA4 +#define ASRC_ASRMCRB_REG 0xA8 +#define ASRC_ASRFSTB_REG 0xAC +#define ASRC_ASRMCRC_REG 0xB0 +#define ASRC_ASRFSTC_REG 0xB4 + struct dma_block { unsigned int index; @@ -190,13 +199,27 @@ struct asrc_pair_params { unsigned int buffer_num; unsigned int pair_hold; unsigned int asrc_active; + unsigned int channel_nums; + struct dma_block input_dma_total; struct dma_block input_dma[ASRC_DMA_BUFFER_NUM]; + struct dma_block output_dma_total; struct dma_block output_dma[ASRC_DMA_BUFFER_NUM]; struct semaphore busy_lock; + struct dma_async_tx_descriptor *desc_in; + struct dma_async_tx_descriptor *desc_out; }; struct asrc_data { struct asrc_pair asrc_pair[3]; + struct proc_dir_entry *proc_asrc; + unsigned long vaddr; + unsigned long paddr; + int dmarx[3]; + int dmatx[3]; + struct class *asrc_class; + int asrc_major; + struct imx_asrc_platform_data *mxc_asrc_data; + struct device *dev; }; extern int asrc_req_pair(int chn_num, enum asrc_pair_index *index); @@ -205,6 +228,9 @@ extern int asrc_config_pair(struct asrc_config *config); extern void asrc_get_status(struct asrc_status_flags *flags); extern void asrc_start_conv(enum asrc_pair_index index); extern void asrc_stop_conv(enum asrc_pair_index index); +extern u32 asrc_get_per_addr(enum asrc_pair_index index, bool i); +extern int asrc_get_dma_request(enum asrc_pair_index index, bool i); +extern void asrc_finish_conv(enum asrc_pair_index index); #endif /* __kERNEL__ */ diff --git a/include/linux/mxcfb.h b/include/linux/mxcfb.h index 3bc7c05310db..5fb07b44063d 100644 --- a/include/linux/mxcfb.h +++ b/include/linux/mxcfb.h @@ -1,5 +1,5 @@ /* - * Copyright 2004-2011 Freescale Semiconductor, Inc. All Rights Reserved. + * Copyright 2004-2012 Freescale Semiconductor, Inc. All Rights Reserved. */ /* @@ -88,6 +88,8 @@ struct mxcfb_rect { #define EPDC_FLAG_FORCE_MONOCHROME 0x02 #define EPDC_FLAG_USE_CMAP 0x04 #define EPDC_FLAG_USE_ALT_BUFFER 0x100 +#define EPDC_FLAG_TEST_COLLISION 0x200 +#define EPDC_FLAG_GROUP_UPDATE 0x400 #define FB_POWERDOWN_DISABLE -1 @@ -108,6 +110,11 @@ struct mxcfb_update_data { struct mxcfb_alt_buffer_data alt_buffer_data; }; +struct mxcfb_update_marker_data { + __u32 update_marker; + __u32 collision_test; +}; + /* * Structure used to define waveform modes for driver * Needed for driver to perform auto-waveform selection @@ -139,7 +146,7 @@ struct mxcfb_waveform_modes { #define MXCFB_SET_TEMPERATURE _IOW('F', 0x2C, int32_t) #define MXCFB_SET_AUTO_UPDATE_MODE _IOW('F', 0x2D, __u32) #define MXCFB_SEND_UPDATE _IOW('F', 0x2E, struct mxcfb_update_data) -#define MXCFB_WAIT_FOR_UPDATE_COMPLETE _IOW('F', 0x2F, __u32) +#define MXCFB_WAIT_FOR_UPDATE_COMPLETE _IOWR('F', 0x2F, struct mxcfb_update_marker_data) #define MXCFB_SET_PWRDOWN_DELAY _IOW('F', 0x30, int32_t) #define MXCFB_GET_PWRDOWN_DELAY _IOR('F', 0x31, int32_t) #define MXCFB_SET_UPDATE_SCHEME _IOW('F', 0x32, __u32) diff --git a/include/linux/mxcfb_epdc_kernel.h b/include/linux/mxcfb_epdc_kernel.h index a0cf4acb161b..017202f8a861 100644 --- a/include/linux/mxcfb_epdc_kernel.h +++ b/include/linux/mxcfb_epdc_kernel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. All Rights Reserved. + * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,7 +25,9 @@ int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info); int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info); int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data, struct fb_info *info); -int mxc_epdc_fb_wait_update_complete(u32 update_marker, struct fb_info *info); +int mxc_epdc_fb_wait_update_complete( + struct mxcfb_update_marker_data *marker_data, + struct fb_info *info); int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay, struct fb_info *info); int mxc_epdc_get_pwrdown_delay(struct fb_info *info); |