/*
 * This file is part of the coreboot project.
 *
 * Copyright (C) 2011 Sven Schnelle <svens@stackframe.org>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; version 2 of
 * the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <console/console.h>
#include <device/device.h>
#include <device/smbus.h>
#include <device/pci.h>
#include <device/pci_ids.h>
#include <device/pci_ops.h>
#include <cpu/x86/msr.h>
#include "chip.h"
#include <string.h>

static void ics954309_init(struct device *dev)
{
	struct drivers_ics_954309_config *config;
	u8 initdata[12];

	if (!dev->enabled || dev->path.type != DEVICE_PATH_I2C)
		return;

	config = dev->chip_info;

	initdata[0] = config->reg0;
	initdata[1] = config->reg1;
	initdata[2] = config->reg2;
	initdata[3] = config->reg3;
	initdata[4] = config->reg4;
	initdata[5] = config->reg5;
	initdata[6] = config->reg6;
	initdata[7] = config->reg7;
	initdata[8] = config->reg8;
	initdata[9] = config->reg9;
	initdata[10] = config->reg10;
	initdata[11] = config->reg11;

	smbus_block_write(dev, 0, 12, initdata);
}

static struct device_operations ics954309_operations = {
        .read_resources   = DEVICE_NOOP,
        .set_resources    = DEVICE_NOOP,
        .enable_resources = DEVICE_NOOP,
        .init             = ics954309_init,
};

static void enable_dev(struct device *dev)
{
	dev->ops = &ics954309_operations;
}

struct chip_operations drivers_ics_954309_ops = {
	CHIP_NAME("ICS 954309 Clock generator")
	.enable_dev = enable_dev,
};
