summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinyu Chen <b03824@freescale.com>2011-08-09 08:52:40 +0800
committerXinyu Chen <b03824@freescale.com>2011-08-09 08:52:40 +0800
commitb81f1bfac13d7eb6f9f2acd9e52e45bcebb65f9d (patch)
treeb2e92c975632ce5198613ddb3d67729e770b7191
parentc7a972020f52d432f1c6a6425fbdeab9124da092 (diff)
Update mx6 android defconfig to enable cs42888 codec.
Resolve the touch intr pin request conflict. Add ipuv3 fb earlysuspend callbacks. Avoid the cs42888 suspend/resume failed issue when we do not have the audio extension board (cs42888 on it) connected. Signed-off-by: Xinyu Chen <xinyu.chen@freescale.com>
-rw-r--r--arch/arm/configs/imx6_android_defconfig23
-rw-r--r--arch/arm/mach-mx6/board-mx6q_sabreauto.c4
-rw-r--r--drivers/video/mxc/mxc_ipuv3_fb.c58
-rw-r--r--sound/soc/codecs/cs42888.c9
4 files changed, 79 insertions, 15 deletions
diff --git a/arch/arm/configs/imx6_android_defconfig b/arch/arm/configs/imx6_android_defconfig
index 096aeb2ca0a0..bef87d1a927a 100644
--- a/arch/arm/configs/imx6_android_defconfig
+++ b/arch/arm/configs/imx6_android_defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux/arm 2.6.38 Kernel Configuration
-# Tue Jul 26 19:45:37 2011
+# Tue Aug 2 13:07:24 2011
#
CONFIG_ARM=y
CONFIG_HAVE_PWM=y
@@ -280,6 +280,7 @@ CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC=y
CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT=y
CONFIG_IMX_HAVE_PLATFORM_IMX_SNVS_RTC=y
CONFIG_IMX_HAVE_PLATFORM_IMX_I2C=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_ESAI=y
CONFIG_IMX_HAVE_PLATFORM_IMX_UART=y
CONFIG_IMX_HAVE_PLATFORM_MXC_EHCI=y
CONFIG_IMX_HAVE_PLATFORM_MXC_PWM=y
@@ -291,10 +292,12 @@ CONFIG_IMX_HAVE_PLATFORM_AHCI=y
CONFIG_IMX_HAVE_PLATFORM_IMX_OCOTP=y
CONFIG_IMX_HAVE_PLATFORM_LDB=y
CONFIG_IMX_HAVE_PLATFORM_VIV_GPU=y
+CONFIG_IMX_HAVE_PLATFORM_MXC_HDMI=y
CONFIG_IMX_HAVE_PLATFORM_IMX_ANATOP_THERMAL=y
CONFIG_IMX_HAVE_PLATFORM_FSL_OTG=y
CONFIG_IMX_HAVE_PLATFORM_FSL_USB_WAKEUP=y
CONFIG_IMX_HAVE_PLATFORM_IMX_PM=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_ASRC=y
#
# Freescale MXC Implementations
@@ -307,6 +310,7 @@ CONFIG_IMX_HAVE_PLATFORM_IMX_PM=y
# CONFIG_ARCH_MX5 is not set
CONFIG_ARCH_MX6=y
CONFIG_FORCE_MAX_ZONEORDER=13
+CONFIG_DMA_ZONE_SIZE=96
CONFIG_ARCH_MX6Q=y
CONFIG_SOC_IMX6Q=y
CONFIG_MACH_MX6Q_SABREAUTO=y
@@ -320,7 +324,6 @@ CONFIG_MXC_PWM=y
# CONFIG_MXC_DEBUG_BOARD is not set
CONFIG_ARCH_MXC_IOMUX_V3=y
CONFIG_IRAM_ALLOC=y
-CONFIG_DMA_ZONE_SIZE=96
CONFIG_CLK_DEBUG=y
#
@@ -369,7 +372,6 @@ CONFIG_CPU_HAS_PMU=y
# CONFIG_ARM_ERRATA_751472 is not set
# CONFIG_ARM_ERRATA_753970 is not set
CONFIG_ARM_GIC=y
-# CONFIG_FIQ_DEBUGGER is not set
#
# Bus support
@@ -866,7 +868,6 @@ CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_ECC=y
# CONFIG_MTD_NAND_ECC_SMC is not set
CONFIG_MTD_NAND=y
@@ -874,6 +875,7 @@ CONFIG_MTD_NAND=y
# CONFIG_MTD_SM_COMMON is not set
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
@@ -1090,7 +1092,6 @@ CONFIG_FEC=y
# CONFIG_NETDEV_10000 is not set
CONFIG_WLAN=y
# CONFIG_USB_ZD1201 is not set
-# CONFIG_BCM4329 is not set
# CONFIG_HOSTAP is not set
# CONFIG_ATH6K_LEGACY is not set
@@ -1181,7 +1182,6 @@ CONFIG_TOUCHSCREEN_EGALAX=y
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_QT602240 is not set
-# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_WM97XX is not set
@@ -1261,7 +1261,6 @@ CONFIG_HW_RANDOM=y
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
-# CONFIG_DCC_TTY is not set
# CONFIG_RAMOOPS is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
@@ -1577,6 +1576,7 @@ CONFIG_FB_MXC_LDB=y
# CONFIG_FB_MXC_ASYNC_PANEL is not set
# CONFIG_FB_MXC_EINK_PANEL is not set
# CONFIG_FB_MXC_ELCDIF_FB is not set
+# CONFIG_FB_MXC_HDMI is not set
#
# Console display driver support
@@ -1634,11 +1634,11 @@ CONFIG_SND_SOC=y
CONFIG_SND_SOC_AC97_BUS=y
CONFIG_SND_IMX_SOC=y
CONFIG_SND_MXC_SOC_MX2=y
-CONFIG_SND_MXC_SOC_SPDIF_DAI=y
-CONFIG_SND_SOC_IMX_SPDIF=y
+CONFIG_SND_SOC_IMX_CS42888=y
+# CONFIG_SND_SOC_IMX_SPDIF is not set
CONFIG_SND_SOC_I2C_AND_SPI=y
# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_MXC_SPDIF=y
+CONFIG_SND_SOC_CS42888=y
# CONFIG_SOUND_PRIME is not set
CONFIG_AC97_BUS=y
CONFIG_HID_SUPPORT=y
@@ -2095,6 +2095,7 @@ CONFIG_MXC_VPU=y
#
# MXC Asynchronous Sample Rate Converter support
#
+# CONFIG_MXC_ASRC is not set
#
# MXC Bluetooth support
@@ -2134,7 +2135,6 @@ CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
CONFIG_EXT4_FS=y
-CONFIG_EXT4_USE_FOR_EXT23=y
CONFIG_EXT4_FS_XATTR=y
# CONFIG_EXT4_FS_POSIX_ACL is not set
# CONFIG_EXT4_FS_SECURITY is not set
@@ -2201,7 +2201,6 @@ CONFIG_MISC_FILESYSTEMS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_YAFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
diff --git a/arch/arm/mach-mx6/board-mx6q_sabreauto.c b/arch/arm/mach-mx6/board-mx6q_sabreauto.c
index 491ddd664b1d..ee6014a83271 100644
--- a/arch/arm/mach-mx6/board-mx6q_sabreauto.c
+++ b/arch/arm/mach-mx6/board-mx6q_sabreauto.c
@@ -772,8 +772,8 @@ static void __init mx6_board_init(void)
imx6q_add_asrc(&imx_asrc_data);
/* DISP0 Detect */
- gpio_request(MX6Q_SABREAUTO_DISP0_DET_INT, "disp0-detect");
- gpio_direction_input(MX6Q_SABREAUTO_DISP0_DET_INT);
+ //gpio_request(MX6Q_SABREAUTO_DISP0_DET_INT, "disp0-detect");
+ //gpio_direction_input(MX6Q_SABREAUTO_DISP0_DET_INT);
/* DISP0 Reset - Assert for i2c disabled mode */
gpio_request(MX6Q_SABREAUTO_DISP0_RESET, "disp0-reset");
diff --git a/drivers/video/mxc/mxc_ipuv3_fb.c b/drivers/video/mxc/mxc_ipuv3_fb.c
index d1252bae883c..1f4600ad38cf 100644
--- a/drivers/video/mxc/mxc_ipuv3_fb.c
+++ b/drivers/video/mxc/mxc_ipuv3_fb.c
@@ -46,6 +46,7 @@
#include <linux/mxcfb.h>
#include <linux/uaccess.h>
#include <linux/fsl_devices.h>
+#include <linux/earlysuspend.h>
#include <asm/mach-types.h>
#include <mach/ipu-v3.h>
#include "mxc_dispdrv.h"
@@ -2012,9 +2013,59 @@ static struct platform_driver mxcfb_driver = {
},
.probe = mxcfb_probe,
.remove = mxcfb_remove,
+#ifndef CONFIG_HAS_EARLYSUSPEND
.suspend = mxcfb_suspend,
.resume = mxcfb_resume,
+#endif
+};
+
+#ifdef CONFIG_HAS_EARLYSUSPEND
+static void mxcfb_early_suspend(struct early_suspend *h)
+{
+ int i;
+ struct platform_device *pdev;
+ struct mxcfb_info *mxcfbi;
+ pm_message_t state = { .event = PM_EVENT_SUSPEND };
+ struct fb_event event;
+ int blank = FB_BLANK_POWERDOWN;
+
+ for (i = 0; i < num_registered_fb; i++) {
+ mxcfbi = (struct mxcfb_info *)registered_fb[i]->par;
+ if (!mxcfbi || mxcfbi->ipu_ch == MEM_FG_SYNC)
+ continue;
+ pdev = to_platform_device(registered_fb[i]->device);
+ mxcfb_suspend(pdev, state);
+ event.info = registered_fb[i];
+ event.data = &blank;
+ fb_notifier_call_chain(FB_EVENT_BLANK, &event);
+ }
+}
+
+static void mxcfb_later_resume(struct early_suspend *h)
+{
+ int i;
+ struct platform_device *pdev;
+ struct fb_event event;
+ struct mxcfb_info *mxcfbi;
+
+ for (i = num_registered_fb - 1; i >= 0; i-- ) {
+ mxcfbi = (struct mxcfb_info *)registered_fb[i]->par;
+ if (!mxcfbi || mxcfbi->ipu_ch == MEM_FG_SYNC)
+ continue;
+ pdev = to_platform_device(registered_fb[i]->device);
+ mxcfb_resume(pdev);
+ event.info = registered_fb[i];
+ event.data = &mxcfbi->next_blank;
+ fb_notifier_call_chain(FB_EVENT_BLANK, &event);
+ }
+}
+
+struct early_suspend fbdrv_earlysuspend = {
+ .level = EARLY_SUSPEND_LEVEL_DISABLE_FB,
+ .suspend = mxcfb_early_suspend,
+ .resume = mxcfb_later_resume,
};
+#endif
/*!
* Main entry function for the framebuffer. The function registers the power
@@ -2025,11 +2076,16 @@ static struct platform_driver mxcfb_driver = {
*/
int __init mxcfb_init(void)
{
- return platform_driver_register(&mxcfb_driver);
+ int ret;
+ ret = platform_driver_register(&mxcfb_driver);
+ if (!ret)
+ register_early_suspend(&fbdrv_earlysuspend);
+ return ret;
}
void mxcfb_exit(void)
{
+ unregister_early_suspend(&fbdrv_earlysuspend);
platform_driver_unregister(&mxcfb_driver);
}
diff --git a/sound/soc/codecs/cs42888.c b/sound/soc/codecs/cs42888.c
index 2ccc9dfbbf68..f64459cd9f07 100644
--- a/sound/soc/codecs/cs42888.c
+++ b/sound/soc/codecs/cs42888.c
@@ -144,6 +144,7 @@ static const char *cs42888_supply_names[CS42888_NUM_SUPPLIES] = {
#define DIF_RIGHT_J 2
#define DIF_TDM 6
+static int cs42888_probed;
/* Private data for the CS42888 */
struct cs42888_private {
struct snd_soc_codec *codec;
@@ -854,6 +855,8 @@ static int cs42888_probe(struct snd_soc_codec *codec)
/* Add DAPM controls */
cs42888_add_widgets(codec);
+ cs42888_probed = 1;
+
return 0;
err:
regulator_bulk_disable(ARRAY_SIZE(cs42888->supplies),
@@ -873,6 +876,7 @@ static int cs42888_remove(struct snd_soc_codec *codec)
{
struct cs42888_private *cs42888 = snd_soc_codec_get_drvdata(codec);
+ cs42888_probed = 0;
regulator_bulk_disable(ARRAY_SIZE(cs42888->supplies),
cs42888->supplies);
regulator_bulk_free(ARRAY_SIZE(cs42888->supplies),
@@ -968,6 +972,9 @@ static int cs42888_i2c_suspend(struct i2c_client *client, pm_message_t mesg)
{
struct cs42888_private *cs42888 = i2c_get_clientdata(client);
struct snd_soc_codec *codec = cs42888->codec;
+
+ if (!cs42888_probed)
+ return 0;
int reg = snd_soc_read(codec, CS42888_PWRCTL) | CS42888_PWRCTL_PDN_MASK;
return snd_soc_write(codec, CS42888_PWRCTL, reg);
@@ -979,6 +986,8 @@ static int cs42888_i2c_resume(struct i2c_client *client)
struct snd_soc_codec *codec = cs42888->codec;
int reg;
+ if (!cs42888_probed)
+ return 0;
/* In case the device was put to hard reset during sleep, we need to
* wait 500ns here before any I2C communication. */
ndelay(500);