/*===============================================================*\ | Project: RTEMS generic MPC5200 BSP | +-----------------------------------------------------------------+ | Copyright (c) 2005 | | Embedded Brains GmbH | | Obere Lagerstr. 30 | | D-82178 Puchheim | | Germany | | rtems@embedded-brains.de | +-----------------------------------------------------------------+ | The license and distribution terms for this file may be | | found in the file LICENSE in this distribution or at | | | | http://www.rtems.com/license/LICENSE. | | | +-----------------------------------------------------------------+ | MBUS module (I2C bus) definitions | +-----------------------------------------------------------------+ | This file has been adapted from an existing source code file, | | see the original file header below for reference | \*===============================================================*/ /* * MCF5206e MBUS module (I2C bus) driver header file * * Copyright (C) 2000 OKTET Ltd., St.-Petersburg, Russia * Author: Victor V. Vengerov * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * * http://www.rtems.com/license/LICENSE. */ #ifndef __MPC5200BSP_MPC5200MBUS_H__ #define __MPC5200BSP_MPC5200MBUS_H__ #include "../include/mpc5200.h" #include "../include/i2c.h" /* States of I2C machine */ typedef enum mpc5200mbus_i2c_state { STATE_UNINITIALIZED, STATE_IDLE, STATE_ADDR_7, STATE_ADDR_1_W, STATE_ADDR_1_R, STATE_SENDING, STATE_RECEIVING } mpc5200mbus_i2c_state; typedef struct mpc5200_mbus { enum mpc5200mbus_i2c_state state;/* State of I2C machine */ i2c_message *msg; /* Pointer to the first message in transfer */ int nmsg; /* Number of messages in transfer */ i2c_message *cmsg; /* Current message */ int byte; /* Byte number in current message */ rtems_id sema; /* MBUS semaphore */ i2c_transfer_done done; /* Transfer done function */ uint32_t done_arg; /* Done function argument */ int bus_idx; /* bus index: 0 or 1 */ } mpc5200mbus; /* mpc5200mbus_initialize -- * Initialize ColdFire MBUS I2C bus controller. * * PARAMETERS: * i2c_bus - pointer to the bus descriptor structure * * RETURNS: * RTEMS_SUCCESSFUL, or RTEMS error code when initialization failed. */ rtems_status_code mpc5200mbus_initialize(mpc5200mbus *i2c_bus); /* mpc5200mbus_select_clock_divider -- * Select divider for system clock which is used for I2C bus clock * generation. Not each divider can be selected for I2C bus; this * function select nearest larger or equal divider, or maximum * possible divider, if passed value greater. * * PARAMETERS: * i2c_bus - pointer to the bus descriptor structure * divider - system frequency divider for I2C serial clock. * * RETURNS: * RTEMS_SUCCESSFUL, if operation performed successfully, or * RTEMS error code when failed. */ rtems_status_code mpc5200mbus_select_clock_divider(mpc5200mbus *i2c_bus, int divider); /* mpc5200mbus_i2c_transfer -- * Initiate multiple-messages transfer over I2C bus via ColdFire MBUS * controller. * * PARAMETERS: * bus - pointer to MBUS controller descriptor * nmsg - number of messages * msg - pointer to messages array * done - function which is called when transfer is finished * done_arg - arbitrary argument passed to done funciton * * RETURNS: * RTEMS_SUCCESSFUL if transfer initiated successfully, or error * code when failed. */ rtems_status_code mpc5200mbus_i2c_transfer(mpc5200mbus *bus, int nmsg, i2c_message *msg, i2c_transfer_done done, uint32_t done_arg); /* mpc5200mbus_i2c_done -- * Close ColdFire MBUS I2C bus controller and release all resources. * * PARAMETERS: * bus - pointer to MBUS controller descriptor * * RETURNS: * RTEMS_SUCCESSFUL, if transfer initiated successfully, or error * code when failed. */ rtems_status_code mpc5200mbus_i2c_done(mpc5200mbus *i2c_bus); /* mpc5200mbus_i2c_interrupt_handler -- * ColdFire MBUS I2C bus controller interrupt handler. This function * called from real interrupt handler, and pointer to MBUS descriptor * structure passed to this function. * * PARAMETERS: * bus - pointert to the bus descriptor structure * * RETURNS: * none */ void mpc5200mbus_i2c_interrupt_handler(mpc5200mbus *bus); /* mpc5200mbus_poll -- * MBUS module poll routine; used to poll events when I2C driver * operates in poll-driven mode. * * PARAMETERS: * none * * RETURNS: * none */ void mpc5200mbus_poll(mpc5200mbus *bus); #endif /* __MPC5200BSP_MPC5200MBUS_H__ */