Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:45

0001 /*
0002  * MCF5206e MBUS module (I2C bus) driver header file
0003  *
0004  *  Copyright (C) 2000 OKTET Ltd., St.-Petersburg, Russia
0005  *  Author: Victor V. Vengerov <vvv@oktet.ru>
0006  *
0007  *  The license and distribution terms for this file may be
0008  *  found in the file LICENSE in this distribution or at
0009  *  http://www.rtems.org/license/LICENSE.
0010  */
0011 
0012 #ifndef __MCFBSP_MCFMBUS_H__
0013 #define __MCFBSP_MCFMBUS_H__
0014 
0015 #include "mcf5206e.h"
0016 #include "i2c.h"
0017 
0018 /* States of I2C machine */
0019 typedef enum mcfmbus_i2c_state {
0020     STATE_IDLE,
0021     STATE_ADDR_7,
0022     STATE_ADDR_1_W,
0023     STATE_ADDR_1_R,
0024     STATE_SENDING,
0025     STATE_RECEIVING
0026 } mcfmbus_i2c_state;
0027 
0028 typedef struct mcfmbus {
0029     uint32_t         base; /* ColdFire internal peripherial base
0030                                     address */
0031     enum mcfmbus_i2c_state state;/* State of I2C machine */
0032     i2c_message           *msg;  /* Pointer to the first message in transfer */
0033     int                    nmsg; /* Number of messages in transfer */
0034     i2c_message           *cmsg; /* Current message */
0035     int                    byte; /* Byte number in current message */
0036     rtems_isr_entry        oldisr; /* Old interrupt handler */
0037     rtems_id               sema; /* MBUS semaphore */
0038     i2c_transfer_done      done; /* Transfer done function */
0039     uintptr_t      done_arg_ptr; /* Done function argument ptr */
0040 } mcfmbus;
0041 
0042 /* mcfmbus_initialize --
0043  *     Initialize ColdFire MBUS I2C bus controller.
0044  *
0045  * PARAMETERS:
0046  *     i2c_bus - pointer to the bus descriptor structure
0047  *     base    - ColdFire internal peripherial base address
0048  *
0049  * RETURNS:
0050  *     RTEMS_SUCCESSFUL, or RTEMS error code when initialization failed.
0051  */
0052 rtems_status_code
0053 mcfmbus_initialize(mcfmbus *i2c_bus, uint32_t   base);
0054 
0055 /* mcfmbus_select_clock_divider --
0056  *     Select divider for system clock which is used for I2C bus clock
0057  *     generation. Not each divider can be selected for I2C bus; this
0058  *     function select nearest larger or equal divider, or maximum
0059  *     possible divider, if passed value greater.
0060  *
0061  * PARAMETERS:
0062  *     i2c_bus - pointer to the bus descriptor structure
0063  *     divider - system frequency divider for I2C serial clock.
0064  *
0065  * RETURNS:
0066  *     RTEMS_SUCCESSFUL, if operation performed successfully, or
0067  *     RTEMS error code when failed.
0068  */
0069 rtems_status_code
0070 mcfmbus_select_clock_divider(mcfmbus *i2c_bus, int divider);
0071 
0072 /* mcfmbus_i2c_transfer --
0073  *     Initiate multiple-messages transfer over I2C bus via ColdFire MBUS
0074  *     controller.
0075  *
0076  * PARAMETERS:
0077  *     bus - pointer to MBUS controller descriptor
0078  *     nmsg - number of messages
0079  *     msg - pointer to messages array
0080  *     done - function which is called when transfer is finished
0081  *     done_arg_ptr - arbitrary argument ptr passed to done funciton
0082  *
0083  * RETURNS:
0084  *     RTEMS_SUCCESSFUL if transfer initiated successfully, or error
0085  *     code when failed.
0086  */
0087 rtems_status_code
0088 mcfmbus_i2c_transfer(mcfmbus *bus, int nmsg, i2c_message *msg,
0089                      i2c_transfer_done done, void *done_arg_ptr);
0090 
0091 /* mcfmbus_i2c_done --
0092  *     Close ColdFire MBUS I2C bus controller and release all resources.
0093  *
0094  * PARAMETERS:
0095  *     bus - pointer to MBUS controller descriptor
0096  *
0097  * RETURNS:
0098  *     RTEMS_SUCCESSFUL, if transfer initiated successfully, or error
0099  *     code when failed.
0100  */
0101 rtems_status_code
0102 mcfmbus_i2c_done(mcfmbus *i2c_bus);
0103 
0104 /* mcfmbus_i2c_interrupt_handler --
0105  *     ColdFire MBUS I2C bus controller interrupt handler. This function
0106  *     called from real interrupt handler, and pointer to MBUS descriptor
0107  *     structure passed to this function.
0108  *
0109  * PARAMETERS:
0110  *     bus - pointert to the bus descriptor structure
0111  *
0112  * RETURNS:
0113  *     none
0114  */
0115 void mcfmbus_i2c_interrupt_handler(mcfmbus *bus);
0116 
0117 /* mcfmbus_poll --
0118  *     MBUS module poll routine; used to poll events when I2C driver
0119  *     operates in poll-driven mode.
0120  *
0121  * PARAMETERS:
0122  *     none
0123  *
0124  * RETURNS:
0125  *     none
0126  */
0127 void mcfmbus_poll(mcfmbus *bus);
0128 
0129 #endif /* __MCFBSP_MCFMBUS_H__ */