示例#1
0
int davinci_i2c_init(char *bus_name)
{
	struct rt_i2c_bus_device *bus;
	struct davinci_i2c_dev *dev;
	int r;

	bus = rt_malloc(sizeof(struct rt_i2c_bus_device));
	if (bus == RT_NULL)
	{
		rt_kprintf("rt_malloc failed\n");
		return -RT_ENOMEM;
	}
	
	rt_memset((void *)bus, 0, sizeof(struct rt_i2c_bus_device));

	bus->ops = &bus_ops;
	bus->timeout = DAVINCI_I2C_TIMEOUT;

	dev = rt_malloc(sizeof(struct davinci_i2c_dev));
	if (!dev) 
	{
		r = -RT_ENOMEM;
		goto err;
	}

	rt_memset((void *)dev, 0, sizeof(struct davinci_i2c_dev));

	rt_sem_init(&dev->completion, "i2c_ack", 0, RT_IPC_FLAG_FIFO);

	dev->irq = IRQ_I2C;

	dev->clk = clk_get("I2CCLK");
	if (dev->clk == RT_NULL) {
		r = -RT_ERROR;
		goto err1;
	}

	psc_change_state(DAVINCI_DM365_LPSC_I2C, 3);

	dev->base = DAVINCI_I2C_BASE;
	dev->bus_freq = 100;
	dev->bus_delay = 0;

	bus->priv = dev;

	i2c_davinci_init(dev);

	rt_hw_interrupt_install(dev->irq, i2c_davinci_isr, (void *)dev, "I2C");
	rt_hw_interrupt_umask(dev->irq);

	return rt_i2c_bus_device_register(bus, bus_name);

err1:
	rt_free(dev);

err:
	rt_free(bus);

	return r;
}
示例#2
0
/**
 * This function will init dm365 board
 */
void rt_hw_board_init()
{
	psc_change_state(DAVINCI_DM365_LPSC_TIMER0, 3);
	psc_change_state(DAVINCI_DM365_LPSC_TIMER1, 3);
	/* initialize the system clock */
	//rt_hw_clock_init();
	davinci_clk_init();

	/* initialize uart */
	rt_hw_uart_init();
#ifdef RT_USING_CONSOLE
	rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif

	/* initialize mmu */
	rt_hw_mmu_init(dm365_mem_desc, sizeof(dm365_mem_desc)/sizeof(dm365_mem_desc[0]));

	/* initialize timer0 */
	rt_hw_timer_init();

}