diff --git a/3.8/bmoca.c b/3.8/bmoca.c
index 6ca337e..08812d9 100644
--- a/3.8/bmoca.c
+++ b/3.8/bmoca.c
@@ -2267,7 +2267,12 @@
 	of_property_read_u32(of_node, "i2c-addr", &pd.bcm3450_i2c_addr);
 	of_property_read_u32(of_node, "use-dma", &pd.use_dma);
 	of_property_read_u32(of_node, "use-spi", &pd.use_spi);
+
+#if defined(CONFIG_BCM7145A0)
+	pd.chip_id = 0x714500a0;
+#else
 	pd.chip_id = (BRCM_CHIP_ID() << 16) | (BRCM_CHIP_REV() + 0xa0);
+#endif
 
 	status = platform_device_add_data(pdev, &pd, sizeof(pd));
 err:
diff --git a/bmoca-6802.c b/bmoca-6802.c
index dafbfc2..c46e323 100644
--- a/bmoca-6802.c
+++ b/bmoca-6802.c
@@ -65,16 +65,37 @@
 #define MOCA_BPCM_NUM         5
 #define MOCA_BPCM_ZONES_NUM   8
 
+#define MOCA_CPU_CLOCK_NUM  1
+#define MOCA_PHY_CLOCK_NUM  2
+
 typedef enum _PMB_COMMAND_E_
 {
-   PMB_COMMAND_ALL_OFF = 0,
-   PMB_COMMAND_ALL_ON,
+   PMB_COMMAND_PHY1_ON=0,
+   PMB_COMMAND_PARTIAL_ON,
+   PMB_COMMAND_PHY1_OFF,
+   PMB_COMMAND_ALL_OFF,
 
    PMB_COMMAND_LAST
 } PMB_COMMAND_E;
 
-static uint32_t zone_off_bitmask[MOCA_BPCM_NUM] = { 0xFF, 0x03, 0x30, 0x00, 0x00 };
-static uint32_t zone_on_bitmask[MOCA_BPCM_NUM]  = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+typedef enum _PMB_GIVE_OWNERSHIP_E_
+{
+   PMB_GIVE_OWNERSHIP_2_HOST = 0,
+   PMB_GIVE_OWNERSHIP_2_FW,
+
+   PMB_GET_OWNERSHIP_LAST
+} PMB_GIVE_OWNERSHIP_E;
+
+struct moca_680x_clk
+{
+	struct device *dev;
+	uint32_t       clock_num;
+};
+
+static uint32_t zone_all_off_bitmask[MOCA_BPCM_NUM] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+static uint32_t zone_partial_on_bitmask[MOCA_BPCM_NUM]  = { 0x41, 0xFC, 0xFF, 0xFF, 0x00 };
+static uint32_t zone_phy1_bitmask[MOCA_BPCM_NUM]  = { 0x00, 0x00, 0x00, 0x00, 0xFF };
+
 
 static void bogus_release(struct device *dev)
 {
@@ -190,6 +211,24 @@
 	#endif
 }
 
+void moca_pmb_delay(struct moca_priv_data *priv)
+{
+	unsigned int data;
+	int i, j;
+	
+	MOCA_WR(priv->base + priv->regs->pmb_master_wdata_offset, 0xFF444000);
+	
+	for (i = 0; i < MOCA_BPCM_NUM; i++)
+	{
+		for (j = 0; j < MOCA_BPCM_ZONES_NUM; j++)
+		{
+			data = 0x100012 + j*4 + i*0x1000; ;
+			MOCA_WR(priv->base + priv->regs->pmb_master_cmd_offset, data);
+			moca_pmb_busy_wait(priv);
+		}
+	}
+}
+
 static void moca_pmb_control(struct moca_priv_data *priv, PMB_COMMAND_E cmd)
 {
 	int i, j;
@@ -201,13 +240,28 @@
 		case PMB_COMMAND_ALL_OFF:
 			// Turn off zone command
 			MOCA_WR(priv->base + priv->regs->pmb_master_wdata_offset, 0xA00);
-			p_zone_control = &zone_off_bitmask[0];
+			p_zone_control = &zone_all_off_bitmask[0];
 			break;
-		case PMB_COMMAND_ALL_ON:
+
+		case PMB_COMMAND_PHY1_OFF:
+			// Turn off zone command
+			MOCA_WR(priv->base + priv->regs->pmb_master_wdata_offset, 0xA00);
+			p_zone_control = &zone_phy1_bitmask[0];
+			break;
+		 
+	 case PMB_COMMAND_PHY1_ON:
 			// Turn on zone command
 			MOCA_WR(priv->base + priv->regs->pmb_master_wdata_offset, 0xC00);
-			p_zone_control = &zone_on_bitmask[0];
+			p_zone_control = &zone_phy1_bitmask[0];
 			break;
+		 
+	 case PMB_COMMAND_PARTIAL_ON:
+			// Turn on zone command
+			MOCA_WR(priv->base + priv->regs->pmb_master_wdata_offset, 0xC00);
+			p_zone_control = &zone_partial_on_bitmask[0];
+			break;
+		 
+		 
 		default:
 			printk(KERN_WARNING "%s: illegal cmd: %08x\n",
 				__FUNCTION__, cmd);
@@ -231,11 +285,19 @@
 
 }
 
-static void moca_pmb_give_fw_cntrl(struct moca_priv_data *priv)
+static void moca_pmb_give_cntrl(struct moca_priv_data *priv, PMB_GIVE_OWNERSHIP_E cmd)
 {
+	int i;
+	uint32_t data;
+
 	/* Pass control over the memories to the FW */
-	MOCA_WR(priv->base + priv->regs->pmb_master_wdata_offset, 0x1);
-	MOCA_WR(priv->base + priv->regs->pmb_master_cmd_offset, 0x100002);
+	MOCA_WR(priv->base + priv->regs->pmb_master_wdata_offset, cmd);
+	for (i = 0; i < 3; i++)
+	{
+		data = 0x100002 + i*0x1000;
+		MOCA_WR(priv->base + priv->regs->pmb_master_cmd_offset, data);   
+		moca_pmb_busy_wait(priv);
+	}
 	moca_pmb_busy_wait(priv);
 }
 
@@ -243,6 +305,7 @@
 {
 //	unsigned long flags;
 //   uint32_t chipid;
+  
 
 	/* disable and clear all interrupts */
 	MOCA_WR(priv->base + priv->regs->l2_mask_set_offset, 0xffffffff);
@@ -261,19 +324,22 @@
 	udelay(20);
 
 	/* reset everything else except clocks */
-	MOCA_SET(priv->base + priv->regs->sw_reset_offset, ~((1 << 3) | (1 << 7)));
+	MOCA_SET(priv->base + priv->regs->sw_reset_offset, 
+		~((1 << 3) | (1 << 7) | (1 << 15) | (1 << 16)));
 	MOCA_RD(priv->base + priv->regs->sw_reset_offset);
 
 	udelay(20);
 
 	/* disable clocks */
-	MOCA_SET(priv->base + priv->regs->sw_reset_offset, ~(1 << 3));
+	MOCA_SET(priv->base + priv->regs->sw_reset_offset, 
+		~((1 << 3) | (1 << 15) | (1 << 16)));
 	MOCA_RD(priv->base + priv->regs->sw_reset_offset);
 
 	MOCA_WR(priv->base + priv->regs->l2_clear_offset, 0xffffffff);
 	MOCA_RD(priv->base + priv->regs->l2_clear_offset);
 
 	/* Power down all zones */
+	//  The host can't give to itself permission.
 	moca_pmb_control(priv, PMB_COMMAND_ALL_OFF);
 
 	/* Power down all SYS_CTRL memories */
@@ -291,6 +357,72 @@
 	return( 2400 / x); 
 }
 
+
+static void moca_ps_PowerCtrlPHY1(struct moca_priv_data *priv,  PMB_COMMAND_E cmd)
+{
+	uint32_t pll_ctrl_3, pll_ctrl_5, sw_reset; 
+	pll_ctrl_3 = MOCA_RD (0x10100048);
+	pll_ctrl_5 = MOCA_RD (0x10100050);
+	sw_reset = MOCA_RD (priv->base + priv->regs->sw_reset_offset);
+
+	// enable PLL 
+	MOCA_UNSET(0x10100048, 1);  // CLKGEN_PLL_SYS1_PLL_CHANNEL_CTRL_CH_3 
+	MOCA_UNSET(0x10100050, 1);  // CLKGEN_PLL_SYS1_PLL_CHANNEL_CTRL_CH_5 
+
+	udelay(1);
+
+	// de assert moca_phy1_disable_clk
+	MOCA_UNSET(priv->base + priv->regs->sw_reset_offset, (1 << 9));
+
+	moca_pmb_control(priv, cmd);
+
+	MOCA_WR (0x10100048, pll_ctrl_3);
+	MOCA_WR (0x10100050, pll_ctrl_5);
+
+	udelay(1);
+	
+	MOCA_WR (priv->base + priv->regs->sw_reset_offset, sw_reset);	
+}
+
+
+static void moca_gphy_init(struct moca_priv_data *priv)
+{
+	struct moca_platform_data * pMocaData = (struct moca_platform_data *)priv->pdev->dev.platform_data;
+	u32 port_mode;
+	u32 rgmii0_on;
+	u32 rgmii1_on;
+	u32 gphy_enabled = 0;
+
+	port_mode = MOCA_RD(0x10800000) & 0x3;
+	rgmii0_on = MOCA_RD(0x1080000c) & 0x1;
+	rgmii1_on = MOCA_RD(0x10800018) & 0x1;
+
+	if ((pMocaData->chip_id & 0xFFFEFFF0) == 0x680200C0)
+	{
+		if ((port_mode == 0) ||
+		    ((port_mode == 1) && rgmii0_on) ||
+		    ((port_mode == 2) && rgmii1_on))
+		{
+			gphy_enabled = 1;
+		}
+	}
+	else
+	{
+		if ((port_mode == 0) ||
+		    ((port_mode != 3) && rgmii1_on))
+		{
+			gphy_enabled = 1;
+		}
+	}
+
+	if (gphy_enabled)
+	{
+		MOCA_UNSET(0x10800004, 0xF);
+		msleep(10);
+		MOCA_WR(0x1040431c, 0xFFFFFFFF);
+	}
+}
+
 /* called any time we start/restart/stop MoCA */
 static void moca_hw_init(struct moca_priv_data *priv, int action)
 {
@@ -303,8 +435,9 @@
 	if (action == MOCA_ENABLE && !priv->enabled) {
 		clk_enable(priv->clk);
 
-		MOCA_WR(0x1040431c, 0xffffffff); // SUN_TOP_CTRL_SW_INIT_0_CLEAR --> Do this at start of sequence
+		MOCA_WR(0x1040431c, ~(1 << 26)); // SUN_TOP_CTRL_SW_INIT_0_CLEAR --> Do this at start of sequence, don't touch gphy_sw_init
 		udelay(20);
+		moca_gphy_init(priv);
    
 		priv->enabled = 1;
 	}
@@ -319,8 +452,7 @@
 	if (action == MOCA_ENABLE) {
 
 		/* Power up all zones */
-		moca_pmb_control(priv, PMB_COMMAND_ALL_ON);
-		moca_pmb_give_fw_cntrl(priv);
+		moca_pmb_control(priv, PMB_COMMAND_PARTIAL_ON);
 
 		MOCA_UNSET(0x1010000c, 1);  // CLKGEN_PLL_SYS0_PLL_CHANNEL_CTRL_CH_3 
 
@@ -346,7 +478,7 @@
 		}
 		udelay(1);
 
-		/* deassert moca_sys_reset, system clock, phy0 and phy0 clock */
+		/* deassert moca_sys_reset, system clock, phy0, phy0 clock */
 		mask = (1 << 1) | (1 << 7) | (1 << 4) | (1 << 8);
 
 		/* deassert phy1 and phy1 clock in bonded mode */
@@ -355,8 +487,16 @@
 
 		MOCA_UNSET(priv->base + priv->regs->sw_reset_offset, mask);
 		MOCA_RD(priv->base + priv->regs->sw_reset_offset);
+		
+        // Before power off the memories, moca_phy1_disable_clk.    
+		if (priv->bonded_mode==0)
+			moca_ps_PowerCtrlPHY1(priv, PMB_COMMAND_PHY1_OFF);
+		else
+			moca_ps_PowerCtrlPHY1(priv, PMB_COMMAND_PHY1_ON);
 
-
+        
+		moca_pmb_give_cntrl(priv, PMB_GIVE_OWNERSHIP_2_FW);
+			
 		/* Check for 6802/6803 A0 chip only with Xtal mod */
 		if ((pMocaData->chip_id & 0xFFFEFFFF) == 0x680200A0)
 		{
@@ -418,8 +558,6 @@
 
 		// CLKGEN_PLL_SYS1_PLL_SSC_MODE_CONTROL_LOW
 		MOCA_SET(0x10100074, (1 << 22));
-		
-		printk("Set PLL SSC mode\n");
 	}
 
 
@@ -449,6 +587,14 @@
 	MOCA_UNSET(0x10404110, 0xF00000FF);
 	MOCA_SET(0x10404110, 0x10000022);
  
+	/* Set pinmuxing for MoCA IIC control */
+	if (((pMocaData->chip_id & 0xFFFFFFF0) == 0x680200C0) || 
+	    ((pMocaData->chip_id & 0xFFFFFFF0) == 0x680300C0))
+	{
+		MOCA_UNSET(0x10404100, 0xFF);  // pin muxing
+		MOCA_SET(0x10404100, 0x22);  // pin muxing
+	}
+
 	MOCA_WR(0x100b0318, 2);
 
 	if (action == MOCA_DISABLE && priv->enabled) {
@@ -578,7 +724,7 @@
 		else
 		{
 			for(i = 0; i < len; i += 4, addr += 4, data++)
-	 			*data = MOCA_RD((uintptr_t)priv->base + addr);
+				*data = MOCA_RD((uintptr_t)priv->base + addr);
 		}
 		mutex_unlock(&priv->copy_mutex);
 	}
@@ -711,6 +857,19 @@
 
 //extern void bcmenet_register_moca_fc_bits_cb(void cb(void *, unsigned long *), int isWan, void * arg);
 
+static void moca_mem_init_680xC0( struct moca_priv_data *priv )
+{
+	// De-assert reset (all memories are OFF by default Force_SP_off =1, Force_Rf_off =1)
+	MOCA_UNSET(priv->base + priv->regs->sw_reset_offset, ((1 << 15) | (1 << 16)));
+
+	moca_pmb_delay(priv);
+	moca_pmb_control(priv, PMB_COMMAND_ALL_OFF);
+
+	//Write Force_SP_on =0, Force_SP_off =0, Force_RF_on =0, Force_RF_off =0
+	MOCA_UNSET(priv->base + 0x001ffd14, ((1 << 10) | (1 << 11)));
+	moca_pmb_control(priv, PMB_COMMAND_PARTIAL_ON);
+}
+
 static int  hw_specific_init( struct moca_priv_data *priv )
 {
 #ifdef DSL_MOCA
@@ -720,6 +879,18 @@
 
 	/* fill in the hw_rev field */
 	pMocaData->chip_id = MOCA_RD(0x10404004) + 0xA0;
+	if ((pMocaData->chip_id & 0xFFFE0000) != 0x68020000) { /* 6802 or 6803 */
+		printk(KERN_ERR "bmoca: No MoCA chip found\n");
+		return -EFAULT;
+	}
+
+	if (((pMocaData->chip_id & 0xFFFFFFF0) == 0x680200C0) || ((pMocaData->chip_id & 0xFFFFFFF0) == 0x680300C0))
+	{
+		priv->i2c_base = NULL; 
+
+		/* Initialize 680x CO memory */
+		moca_mem_init_680xC0(priv);
+	}
 
 	pMocaData->hw_rev = HWREV_MOCA_20_GEN22;
 
@@ -824,7 +995,10 @@
 		bcm3450_write_reg(addr, data);
 	else
 #endif
-		moca_3450_write_i2c(priv, addr, data);
+	{
+		if (priv->i2c_base != NULL)
+			moca_3450_write_i2c(priv, addr, data);
+	}
 }
 
 static u32 moca_3450_read(struct moca_priv_data *priv, u8 addr)
@@ -835,7 +1009,12 @@
 		return(bcm3450_read_reg(addr));
 	else
 #endif
-		return(moca_3450_read_i2c(priv, addr));
+	{
+		if (priv->i2c_base != NULL)
+			return(moca_3450_read_i2c(priv, addr));
+		else
+			return(0xffffffff);
+	}
 }
 
 /*
@@ -844,12 +1023,27 @@
 
 struct clk *clk_get(struct device *dev, const char *id)
 {
-	return NULL;
+	// We're not actually using the "struct clk" for anything
+	// We'll use our own structure
+	struct moca_680x_clk * pclk = kzalloc(sizeof(struct moca_680x_clk), GFP_KERNEL);
+
+	pclk->dev = dev;
+
+	if (!strcmp(id, "moca-cpu"))
+		pclk->clock_num = MOCA_CPU_CLOCK_NUM;
+	else if (!strcmp(id, "moca-phy"))
+		pclk->clock_num = MOCA_PHY_CLOCK_NUM;
+	else
+	{
+		kfree(pclk);
+		return(NULL);
+	}
+
+	return((struct clk *)pclk);
 }
 
 int clk_enable(struct clk *clk)
 {
-
 	return 0;
 }
 
@@ -859,10 +1053,113 @@
 
 void clk_put(struct clk *clk)
 {
+	kfree((struct moca_680x_clk *)clk);
 }
 
+struct moca_6802c0_clock_params
+{
+	uint32_t        cpu_hz;
+	uint32_t        pdiv;
+	uint32_t        ndiv;
+	uint32_t        pll_mdivs[6];
+};
+
+#define NUM_6802C0_CLOCK_OPTIONS 2
+struct moca_6802c0_clock_params moca_6802c0_clock_params[NUM_6802C0_CLOCK_OPTIONS] =
+{
+	{  // VCO of 2100, default
+		420000000,             // cpu_hz
+		1,                     // pdiv
+		42,                    // ndiv
+		{5, 21, 7, 7, 42, 42}  // pll_mdivs[6]
+	},
+	{  // VCO of 2400
+		400000000,             // cpu_hz
+		1,                     // pdiv
+		48,                    // ndiv
+		{6, 24, 8, 8, 48, 48}  // pll_mdivs[6]
+	},
+};
+
 int clk_set_rate(struct clk *clk, unsigned long rate)
 {
-	return 0;
+	// The MOCA_RD/MOCA_WR macros need a valid 'priv->pdev->dev'
+	struct moca_priv_data dummy_priv; 
+	struct platform_device dummy_pd;
+	struct moca_priv_data *priv = &dummy_priv;
+	struct moca_680x_clk * pclk = (struct moca_680x_clk *) clk;
+	struct moca_platform_data * pMocaData = (struct moca_platform_data *)pclk->dev->platform_data;
+	struct moca_6802c0_clock_params * p_clock_data = &moca_6802c0_clock_params[0];
+	uint32_t i;
+	uint32_t addr;
+	uint32_t data;
+	int ret = -1;
+
+	priv->pdev = &dummy_pd;
+	priv->pdev->dev = *pclk->dev;
+
+	if (pclk->clock_num == MOCA_CPU_CLOCK_NUM)
+	{
+		if ((pMocaData->chip_id & 0xFFFFFFF0) == 0x680200C0)
+		{
+			for (i = 0; i < NUM_6802C0_CLOCK_OPTIONS; i++)
+			{
+				if (moca_6802c0_clock_params[i].cpu_hz == rate)
+				{
+					p_clock_data = &moca_6802c0_clock_params[i];
+					ret = 0;
+				}
+			}
+
+			// 1. Set POST_DIVIDER_HOLD_CHx (bit [12] in each PLL_CHANNEL_CTRL_CH_x 
+			//    register)  // this will zero the output channels
+			for (addr = 0x1010003c; addr <= 0x10100050; addr += 4)
+			{
+				MOCA_SET(addr, (1 << 12));
+			}
+
+			//2. Program new PDIV/NDIV value, this will lose lock and 
+			//   trigger a new PLL lock process for a new VCO frequency
+			MOCA_WR(0x10100058, ((p_clock_data->pdiv << 10) | p_clock_data->ndiv));
+
+			//3. Wait >10 usec for lock time // max lock time per data sheet is 460/Fref, 
+			//   Or alternatively monitor CLKGEN_PLL_SYS*_PLL_LOCK_STATUS to check if PLL has locked
+			data = 0;
+			i = 0;
+			while ((data & 0x1) == 0)
+			{
+				/* This typically is only read once */
+				data = MOCA_RD(0x10100060); // CLKGEN_PLL_SYS1_PLL_LOCK_STATUS
+
+				if (i++ > 10)
+				{
+					printk("MoCA SYS1 PLL NOT LOCKED!\n");
+					break;
+				}
+			}
+
+			//4. Configure new MDIV value along with set POST_DIVIDER_LOAD_EN_CHx 
+			//   (bit [13]=1, while keep bit[12]=1) in each PLL_CHANNEL_CTRL_CH_x register
+			i = 0;
+			for (addr = 0x1010003c; addr <= 0x10100050; addr += 4)
+			{
+				data = MOCA_RD(addr);
+				data |= (1 << 13);
+				data &= ~(0xFF << 1);
+				data |= (p_clock_data->pll_mdivs[i] << 1);
+				MOCA_WR(addr, data);
+				i++;
+			}
+
+			//5. Clear bits [12] and bit [13] in each PLL_CHANNEL_CTRL_CH_x
+			for (addr = 0x1010003c; addr <= 0x10100050; addr += 4)
+			{
+				MOCA_UNSET(addr, ((1 << 13) | (1 << 12)));
+			}
+
+		}
+	}
+
+	return(ret);
 }
 
diff --git a/bmoca.h b/bmoca.h
index d182f35..f7d7d69 100644
--- a/bmoca.h
+++ b/bmoca.h
@@ -42,7 +42,7 @@
 #define MOCA_BAND_NAMES { \
 	"highrf", "midrf", "wanrf", \
 	"ext_d", "d_low", "d_high", \
-	"e", "f", "g", \
+	"e", "f", "g", "h"\
 }
 
 #define MOCA_BOOT_FLAGS_BONDED	(1 << 0)
