diff --git a/patches/usomiq/0001-add-usomiq-support.patch b/patches/usomiq/0001-add-usomiq-support.patch
new file mode 100644
index 0000000..3a8ff0c
--- /dev/null
+++ b/patches/usomiq/0001-add-usomiq-support.patch
@@ -0,0 +1,99 @@
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index 44a93a3..b146594 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -1644,6 +1644,7 @@ static struct gpio_led bone_gpio_leds[] = {
+ 	},
+ 	{
+ 		.name			= "beaglebone::usr2",
++		.default_trigger	= "cpu-busy",
+ 		.gpio			= BEAGLEBONE_USR3_LED,
+ 	},
+ 	{
+@@ -1846,6 +1847,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 +2141,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");
+@@ -4080,6 +4091,17 @@ 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},
++	{NULL, 0, 0},
++};
++
+ static void setup_low_cost_evm(void)
+ {
+ 	pr_info("The board is a AM335x Low Cost EVM.\n");
+@@ -4189,6 +4211,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)
+ {
+@@ -4278,6 +4326,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/patches/usomiq/0002-add-sound-cape-support.patch b/patches/usomiq/0002-add-sound-cape-support.patch
new file mode 100644
index 0000000..0f0ec08
--- /dev/null
+++ b/patches/usomiq/0002-add-sound-cape-support.patch
@@ -0,0 +1,45 @@
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index b146594..3f17cf8 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -3680,7 +3680,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),
+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,
diff --git a/patches/usomiq/0003-usomiq-hack-eeprom-check.patch b/patches/usomiq/0003-usomiq-hack-eeprom-check.patch
new file mode 100644
index 0000000..1662ce4
--- /dev/null
+++ b/patches/usomiq/0003-usomiq-hack-eeprom-check.patch
@@ -0,0 +1,28 @@
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index 3f17cf8..aad2738 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -4287,13 +4287,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));
++		}
+ 	}
+ 
+ 	/*
diff --git a/patches/usomiq/0003-usomiq-hack-eeprom-check2.patch b/patches/usomiq/0003-usomiq-hack-eeprom-check2.patch
new file mode 100644
index 0000000..0cb73fb
--- /dev/null
+++ b/patches/usomiq/0003-usomiq-hack-eeprom-check2.patch
@@ -0,0 +1,18 @@
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index b8c0d85..1d05bbc 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -4283,7 +4283,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 */
diff --git a/patches/usomiq/0004-add-usomiq-sgx-support.patch b/patches/usomiq/0004-add-usomiq-sgx-support.patch
new file mode 100644
index 0000000..41c4c32
--- /dev/null
+++ b/patches/usomiq/0004-add-usomiq-sgx-support.patch
@@ -0,0 +1,64 @@
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index aad2738..b8c0d85 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -3996,6 +3996,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},
+@@ -4099,6 +4106,7 @@ static struct evm_dev_cfg usomiq_dev_cfg[] = {
+ 	{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},
+ };
+ 
+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/patches/defconfig b/patches/defconfig
index 814aace..ddf9a5d 100644
--- a/patches/defconfig
+++ b/patches/defconfig
@@ -479,10 +479,10 @@ CONFIG_CPU_FREQ=y
 CONFIG_CPU_FREQ_TABLE=y
 CONFIG_CPU_FREQ_STAT=y
 CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
 # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
 # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
 # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
 CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
@@ -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/patch.sh b/patch.sh
index c7d55af..65955a3 100644
--- a/patch.sh
+++ b/patch.sh
@@ -1378,6 +1378,12 @@ 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/0001-add-usomiq-support.patch"
+	git apply "${DIR}/patches/usomiq/0002-add-sound-cape-support.patch"
+	git apply "${DIR}/patches/usomiq/0003-usomiq-hack-eeprom-check.patch"
+	git apply "${DIR}/patches/usomiq/0004-add-usomiq-sgx-support.patch"
+	git apply "${DIR}/patches/usomiq/0003-usomiq-hack-eeprom-check2.patch"
 }
 
 rt_patchset () {
