diff --git a/patch.sh b/patch.sh
index c7d55af..5f8fb58 100644
--- a/patch.sh
+++ b/patch.sh
@@ -1378,6 +1378,8 @@ am33x_cleanup () {
 
 #	${git} "${DIR}/patches/beaglebone/0001-ARM-omap-am335x-BeagleBone-userspace-SPI-support.patch"
 #	${git} "${DIR}/patches/fixes/0001-rt2x00-Add-support-for-D-Link-DWA-127-to-rt2800usb.patch"
+
+	git apply "${DIR}/patches/usomiq/linux-v3.2-add-usomiq.patch"
 }
 
 rt_patchset () {
diff --git a/patches/defconfig b/patches/defconfig
index 814aace..f04a1c7 100644
--- a/patches/defconfig
+++ b/patches/defconfig
@@ -1205,9 +1205,10 @@ CONFIG_REGMAP_SPI=y
 # CONFIG_CBUS is not set
 CONFIG_CONNECTOR=y
 CONFIG_PROC_EVENTS=y
-CONFIG_MTD=m
+CONFIG_MTD=y
 # CONFIG_MTD_TESTS is not set
 # CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
 # CONFIG_MTD_AFS_PARTS is not set
 # CONFIG_MTD_OF_PARTS is not set
 # CONFIG_MTD_AR7_PARTS is not set
@@ -1215,10 +1216,9 @@ CONFIG_MTD=m
 #
 # User Modules And Translation Layers
 #
-# CONFIG_MTD_CHAR is not set
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
 # CONFIG_FTL is not set
 # CONFIG_NFTL is not set
 # CONFIG_INFTL is not set
@@ -1271,16 +1271,16 @@ CONFIG_MTD_CFI_I2=y
 # CONFIG_MTD_DOC2001 is not set
 # CONFIG_MTD_DOC2001PLUS is not set
 # CONFIG_MTD_DOCG3 is not set
-CONFIG_MTD_NAND_ECC=m
+CONFIG_MTD_NAND_ECC=y
 # CONFIG_MTD_NAND_ECC_SMC is not set
-CONFIG_MTD_NAND=m
+CONFIG_MTD_NAND=y
 # CONFIG_MTD_NAND_VERIFY_WRITE is not set
 # CONFIG_MTD_NAND_ECC_BCH is not set
 # 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_OMAP2=m
-CONFIG_MTD_NAND_IDS=m
+CONFIG_MTD_NAND_OMAP2=y
+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
@@ -1291,7 +1291,11 @@ CONFIG_MTD_NAND_IDS=m
 # LPDDR flash memory drivers
 #
 # CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_UBI is not set
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+# CONFIG_MTD_UBI_DEBUG is not set
 CONFIG_DTC=y
 CONFIG_OF=y
 
@@ -3395,7 +3399,7 @@ CONFIG_LEDS_TRIGGERS=y
 CONFIG_LEDS_TRIGGER_TIMER=y
 CONFIG_LEDS_TRIGGER_HEARTBEAT=y
 CONFIG_LEDS_TRIGGER_BACKLIGHT=y
-# CONFIG_LEDS_TRIGGER_CPU is not set
+CONFIG_LEDS_TRIGGER_CPU=y
 CONFIG_LEDS_TRIGGER_GPIO=y
 CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
 
@@ -3822,6 +3826,12 @@ CONFIG_BEFS_FS=m
 CONFIG_BFS_FS=m
 CONFIG_EFS_FS=m
 # CONFIG_JFFS2_FS is not set
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
 CONFIG_LOGFS=m
 CONFIG_CRAMFS=m
 CONFIG_SQUASHFS=m
@@ -4191,9 +4201,9 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m
 #
 # Compression
 #
-CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_DEFLATE=y
 CONFIG_CRYPTO_ZLIB=m
-CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_LZO=y
 
 #
 # Random Number Generation
diff --git a/patches/usomiq/linux-v3.2-add-usomiq.patch b/patches/usomiq/linux-v3.2-add-usomiq.patch
new file mode 100644
index 0000000..6dfce76
--- /dev/null
+++ b/patches/usomiq/linux-v3.2-add-usomiq.patch
@@ -0,0 +1,310 @@
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index 44a93a3..5579430 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -75,6 +75,7 @@
+ #include "mux.h"
+ #include "devices.h"
+ #include "hsmmc.h"
++#include "control.h"
+ 
+ /* Convert GPIO signal to GPIO pin number */
+ #define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio))
+@@ -1626,9 +1627,9 @@ static struct platform_device bone_w1_device = {
+ 
+ /* LEDS - gpio1_21 -> gpio1_24 */
+ 
+-#define BEAGLEBONE_USR1_LED  GPIO_TO_PIN(1, 21)
++#define BEAGLEBONE_USR1_LED  GPIO_TO_PIN(1, 20)
+ #define BEAGLEBONE_USR2_LED  GPIO_TO_PIN(1, 22)
+-#define BEAGLEBONE_USR3_LED  GPIO_TO_PIN(1, 23)
++#define BEAGLEBONE_USR3_LED  GPIO_TO_PIN(1, 21)
+ #define BEAGLEBONE_USR4_LED  GPIO_TO_PIN(1, 24)
+ 
+ static struct gpio_led bone_gpio_leds[] = {
+@@ -1644,6 +1645,7 @@ static struct gpio_led bone_gpio_leds[] = {
+ 	},
+ 	{
+ 		.name			= "beaglebone::usr2",
++		.default_trigger	= "cpu-busy",
+ 		.gpio			= BEAGLEBONE_USR3_LED,
+ 	},
+ 	{
+@@ -1846,6 +1848,15 @@ static struct pinmux_config bone_pin_mux[] = {
+ 	{NULL, 0},
+ };
+ 
++static struct pinmux_config usom_bone_pin_mux[] = {
++	/* User LED gpios (gpio1_21 to gpio1_24) */
++    {"gpmc_a5.rgmii2_td0", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR0
++    {"gpmc_a6.rgmii2_tclk", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR1
++    {"gpmc_a7.rgmii2_rclk", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR2
++    {"gpmc_a8.rgmii2_rd3", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR3
++	{NULL, 0},
++};
++
+ /* Module pin mux for eCAP0 */
+ static struct pinmux_config ecap0_pin_mux[] = {
+ 	{"ecap0_in_pwm0_out.ecap0_in_pwm0_out",
+@@ -2131,7 +2142,8 @@ static void bone_tsc_init(int evm_id, int profile)
+ static void boneleds_init(int evm_id, int profile )
+ {
+ 	int err;
+-	setup_pin_mux(bone_pin_mux);
++	if (!strncmp("A335USOM", config.name, 8)) setup_pin_mux(usom_bone_pin_mux);
++	else setup_pin_mux(bone_pin_mux);
+ 	err = platform_device_register(&bone_leds_gpio);
+ 	if (err)
+ 		pr_err("failed to register BeagleBone LEDS\n");
+@@ -3669,7 +3681,7 @@ static struct at24_platform_data cape_eeprom_info = {
+ 
+ static struct i2c_board_info __initdata cape_i2c_boardinfo[] = {
+ 	{
+-		I2C_BOARD_INFO("tlv320aic3x", 0x1b),
++		I2C_BOARD_INFO("tlv320aic3x", 0x18),
+ 	},
+         {
+                 I2C_BOARD_INFO("24c256", 0x54),
+@@ -3880,8 +3892,22 @@ static void tps65217_init(int evm_id, int profile)
+ 			" confident that the current\nrequirements for OPP100"
+ 			" use-case don't exceed the USB limits, switching\nto"
+ 			" AC power is recommended.\n");
+-		opp_disable(mpu_dev, 600000000);
+-		opp_disable(mpu_dev, 720000000);
++		opp_disable(mpu_dev, 800000000);
++		opp_disable(mpu_dev, 1000000000);
++	}
++	/* Limit core frequency to an actual value */
++	val = readl(AM33XX_CTRL_REGADDR(0x07FC));
++	printk("efuse_sma=0x%08x\n",val);
++	if (val) {
++	    val = val&0x1fff;
++	    switch (val) {
++		case 0x1FEF: opp_disable(mpu_dev, 600000000);
++		case 0x1FAF: opp_disable(mpu_dev, 720000000);
++		case 0x1F2F: opp_disable(mpu_dev, 800000000);
++		case 0x1E2F: opp_disable(mpu_dev, 1000000000);
++		default:
++			     break;
++	    }
+ 	}
+ }
+ 
+@@ -3985,6 +4011,13 @@ static void profibus_init(int evm_id, int profile)
+ 	return;
+ }
+ 
++static void sgx_init(int evm_id, int profile)
++{
++	if (omap3_has_sgx()) {
++		am33xx_gpu_init();
++	}
++}
++
+ /* Low-Cost EVM */
+ static struct evm_dev_cfg low_cost_evm_dev_cfg[] = {
+ 	{rgmii1_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
+@@ -4080,6 +4113,18 @@ static struct evm_dev_cfg beaglebone_dev_cfg[] = {
+ 	{NULL, 0, 0},
+ };
+ 
++/* uSomIQ SOM */
++static struct evm_dev_cfg usomiq_dev_cfg[] = {
++	{tps65217_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
++	{i2c2_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
++	{mii1_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
++	{usb0_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
++	{usb1_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
++	{evm_nand_init, DEV_ON_BASEBOARD, PROFILE_NONE},
++	{sgx_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
++	{NULL, 0, 0},
++};
++
+ static void setup_low_cost_evm(void)
+ {
+ 	pr_info("The board is a AM335x Low Cost EVM.\n");
+@@ -4189,6 +4234,32 @@ static void setup_beaglebone(void)
+ 
+ }
+ 
++/* uSomIQ SOM */
++static void setup_usomiq(void)
++{
++	pr_info("Detected uSomIQ SOM.\n");
++	gp_evm_revision = GP_EVM_ACTUALLY_BEAGLEBONE;
++
++	/* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */
++	am335x_mmc[0].gpio_wp = -EINVAL;
++
++	/* Disable w1 for NAND memory */
++	beaglebone_w1gpio_free = 0;
++
++	_configure_device(LOW_COST_EVM, usomiq_dev_cfg, PROFILE_NONE);
++
++	/* TPS65217 regulator has full constraints */
++	regulator_has_full_constraints();
++
++	/* Fill up global evmid */
++	am33xx_evmid_fillup(BEAGLE_BONE_A3);
++
++	/*TODO:We are registering all pwms for the beaglebone here
++	 *this may effect power management in the future
++	 */
++	register_all_pwms();
++
++}
+ 
+ static void am335x_setup_daughter_board(struct memory_accessor *m, void *c)
+ {
+@@ -4227,7 +4298,12 @@ static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context)
+ 
+ 	if (ret != sizeof(am335x_mac_addr)) {
+ 		pr_warning("AM335X: EVM Config read fail: %d\n", ret);
+-		return;
++		pr_err("This likely means that there either is no/or a failed EEPROM\n");
++		{
++			char ar[] = {0xaa, 0x55, 0x33, 0xee, 'A', '3', '3', '5', 'U', 'S', 'O', 'M', 0};
++			memcpy((char *)&config, (char *)&ar, sizeof(ar));
++		}
++		//return;
+ 	}
+ 
+ 	/* Fillup global mac id */
+@@ -4239,13 +4315,21 @@ static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context)
+ 	if (ret != sizeof(config)) {
+ 		pr_err("AM335X EVM config read fail, read %d bytes\n", ret);
+ 		pr_err("This likely means that there either is no/or a failed EEPROM\n");
+-		goto out;
++		//goto out;
++		{
++			char ar[] = {0xaa, 0x55, 0x33, 0xee, 'A', '3', '3', '5', 'U', 'S', 'O', 'M', 0};
++			memcpy((char *)&config, (char *)&ar, sizeof(ar));
++		}
+ 	}
+ 
+ 	if ((config.header != AM335X_EEPROM_HEADER) && (config.header != BONEA2_EEPROM_HEADER)) {
+ 		pr_err("AM335X: wrong header 0x%x, expected 0x%x\n",
+ 			config.header, AM335X_EEPROM_HEADER);
+-		goto out;
++		//goto out;
++		{
++			char ar[] = {0xaa, 0x55, 0x33, 0xee, 'A', '3', '3', '5', 'U', 'S', 'O', 'M', 0};
++			memcpy((char *)&config, (char *)&ar, sizeof(ar));
++		}
+ 	}
+ 
+ 	/*
+@@ -4278,6 +4362,9 @@ static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context)
+ 			setup_beaglebone_old();
+ 		else
+ 			setup_beaglebone();
++	} else if (!strncmp("A335USOM", config.name, 8)) {
++		daughter_brd_detected = false;
++		setup_usomiq();
+ 	} else {
+ 		/* only 6 characters of options string used for now */
+ 		snprintf(tmp, 7, "%s", config.opt);
+diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
+index 3ef045e..69f35a8 100644
+--- a/arch/arm/mach-omap2/devices.c
++++ b/arch/arm/mach-omap2/devices.c
+@@ -1496,3 +1496,22 @@ int __init omap_init_gpmc(struct gpmc_devices_info *pdata, int pdata_len)
+ 
+ 	return 0;
+ }
++
++void __init am33xx_gpu_init(void)
++{
++	int id = -1;
++	struct platform_device *pdev;
++	struct omap_hwmod *oh;
++	char *oh_name = "gfx";
++	char *dev_name = "pvrsrvkm";
++
++	oh = omap_hwmod_lookup(oh_name);
++	if (!oh) {
++		pr_err("Could not find %s hwmod data\n", oh_name);
++		return;
++	}
++
++	pdev = omap_device_build(dev_name, id, oh, NULL, 0, NULL, 0, 0);
++
++	WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name);
++}
+diff --git a/arch/arm/mach-omap2/devices.h b/arch/arm/mach-omap2/devices.h
+index 4725325..1066db6 100644
+--- a/arch/arm/mach-omap2/devices.h
++++ b/arch/arm/mach-omap2/devices.h
+@@ -23,5 +23,6 @@ extern int __init am33xx_register_ecap(int id,
+ extern int __init am33xx_register_ehrpwm(int id,
+ 		struct pwmss_platform_data *pdata);
+ extern int __init omap_init_elm(void);
++extern void __init am33xx_gpu_init(void);
+ 
+ #endif
+diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c
+index 9fbcfc3..b7c770b 100644
+--- a/arch/arm/mach-omap2/opp3xxx_data.c
++++ b/arch/arm/mach-omap2/opp3xxx_data.c
+@@ -162,20 +162,20 @@ static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
+  * domain VDD_MPU must be operated as defined by OPP100. So MPU OPP50
+  * definition is modified to 275MHz, 1.1V.
+  */
+-#define AM33XX_VDD_MPU_OPP50_UV		1100000
+-#define AM33XX_VDD_MPU_OPP100_UV	1100000
+-#define AM33XX_VDD_MPU_OPP120_UV	1200000
+-#define AM33XX_VDD_MPU_OPPTURBO_UV	1260000
++#define AM33XX_VDD_MPU_OPP50_UV		969000
++#define AM33XX_VDD_MPU_OPP100_UV	1112000
++#define AM33XX_VDD_MPU_OPP120_UV	1300000
++#define AM33XX_VDD_MPU_OPPTURBO_UV	1350000
+ 
+ static struct omap_opp_def __initdata am33xx_opp_def_list[] = {
+ 	/* MPU OPP1 - OPP50 */
+-	OPP_INITIALIZER("mpu", true,  275000000, AM33XX_VDD_MPU_OPP50_UV),
++	OPP_INITIALIZER("mpu", true,  300000000, AM33XX_VDD_MPU_OPP50_UV),
+ 	/* MPU OPP2 - OPP100 */
+-	OPP_INITIALIZER("mpu", true,  500000000, AM33XX_VDD_MPU_OPP100_UV),
++	OPP_INITIALIZER("mpu", true,  600000000, AM33XX_VDD_MPU_OPP100_UV),
+ 	/* MPU OPP3 - OPP120 */
+-	OPP_INITIALIZER("mpu", true,  600000000, AM33XX_VDD_MPU_OPP120_UV),
++	OPP_INITIALIZER("mpu", true,  800000000, AM33XX_VDD_MPU_OPP120_UV),
+ 	/* MPU OPP4 - OPPTurbo */
+-	OPP_INITIALIZER("mpu", true,  720000000, AM33XX_VDD_MPU_OPPTURBO_UV),
++	OPP_INITIALIZER("mpu", true,  1000000000, AM33XX_VDD_MPU_OPPTURBO_UV),
+ };
+ 
+ /**
+diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
+index 7ad7b37..59c7df7 100644
+--- a/sound/soc/davinci/davinci-evm.c
++++ b/sound/soc/davinci/davinci-evm.c
+@@ -117,15 +117,13 @@ static const struct snd_soc_dapm_route audio_map[] = {
+ 	{"Line Out", NULL, "RLOUT"},
+ 
+ 	/* Mic connected to (MIC3L | MIC3R) */
+-	{"MIC3L", NULL, "Mic Bias 2V"},
+-	{"MIC3R", NULL, "Mic Bias 2V"},
+-	{"Mic Bias 2V", NULL, "Mic Jack"},
++	{"LINE2L", NULL, "Mic Bias 2.5V"},
++	{"LINE2R", NULL, "Mic Bias 2.5V"},
++	{"Mic Bias 2.5V", NULL, "Mic Jack"},
+ 
+ 	/* Line In connected to (LINE1L | LINE2L), (LINE1R | LINE2R) */
+ 	{"LINE1L", NULL, "Line In"},
+-	{"LINE2L", NULL, "Line In"},
+ 	{"LINE1R", NULL, "Line In"},
+-	{"LINE2R", NULL, "Line In"},
+ };
+ 
+ /* Logic for a aic3x as connected on a davinci-evm */
+@@ -246,7 +244,7 @@ static struct snd_soc_dai_link am335x_evm_dai = {
+ 	.stream_name = "AIC3X",
+ 	.cpu_dai_name = "davinci-mcasp.0",
+ 	.codec_dai_name = "tlv320aic3x-hifi",
+-	.codec_name = "tlv320aic3x-codec.3-001b",
++	.codec_name = "tlv320aic3x-codec.3-0018",
+ 	.platform_name = "davinci-pcm-audio",
+ 	.init = evm_aic3x_init,
+ 	.ops = &evm_ops,
