summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorXinyu Chen <xinyu.chen@freescale.com>2012-03-30 11:36:25 +0800
committerXinyu Chen <xinyu.chen@freescale.com>2012-03-30 11:36:25 +0800
commit88f08b421c91f2d4db3a110e5e3a86d64e2b40c9 (patch)
treee3af9f0bf2a355fd69119ae9b680371d39012a2d /include
parent6cf2f136f3df6fad82ddabd89d93c53181564274 (diff)
parentf53c766e85d69add6a26d6f3e233dec6dc98de1e (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.h1
-rw-r--r--include/linux/cpufreq.h12
-rw-r--r--include/linux/fsl_devices.h14
-rw-r--r--include/linux/mfd/pfuze.h4
-rw-r--r--include/linux/mmc/core.h7
-rw-r--r--include/linux/mmc/host.h23
-rw-r--r--include/linux/mmc/sdhci.h9
-rw-r--r--include/linux/mxc_asrc.h30
-rw-r--r--include/linux/mxcfb.h11
-rw-r--r--include/linux/mxcfb_epdc_kernel.h6
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);