/*
 * Copyright 2012 2012 KEYMILE AG, CH-3097 Bern
 * Valentin Longchamp <valentin.longchamp@keymile.com>
 *
 * arch/arm/mach-kirkwood/board-km_kirkwood.c
 *
 * Keymile km_kirkwood Reference Desing Init for drivers not converted to
 * flattened device tree yet.
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2.  This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/mv643xx_eth.h>
#include <linux/clk.h>
#include <linux/clk-private.h>
#include "common.h"

static struct mv643xx_eth_platform_data km_kirkwood_ge00_data = {
	.phy_addr	= MV643XX_ETH_PHY_ADDR(0),
};

void __init km_kirkwood_init(void)
{
	struct clk *sata_clk;
	/*
	 * Our variant of kirkwood (integrated in the Bobcat) hangs on accessing
	 * SATA bits (14-15) of the Clock Gating Control Register. Since these
	 * devices are also not present in this variant, their clocks get
	 * disabled because unused when clk_disable_unused() gets called.
	 * That's why we change the flags to these clocks to CLK_IGNORE_UNUSED
	 */
	sata_clk = clk_get_sys("sata_mv.0", "0");
	if (!IS_ERR(sata_clk))
		sata_clk->flags |= CLK_IGNORE_UNUSED;
	sata_clk = clk_get_sys("sata_mv.0", "1");
	if (!IS_ERR(sata_clk))
		sata_clk->flags |= CLK_IGNORE_UNUSED;

	kirkwood_ge00_init(&km_kirkwood_ge00_data);
}
