forked from Imagelibrary/rtems
89 lines
2.4 KiB
C
89 lines
2.4 KiB
C
/*
|
|
* RTEMS generic MPC5200 BSP
|
|
*
|
|
* This file configures the pcf8563 RTC for a PM520 board.
|
|
*
|
|
* Based on:
|
|
* This file contains the RTC driver table for Motorola MCF5206eLITE
|
|
* ColdFire evaluation board.
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2000 OKTET Ltd., St.-Petersburg, Russia
|
|
* Author: Victor V. Vengerov <vvv@oktet.ru>
|
|
* Copyright (c) 2005 embedded brains GmbH. All rights reserved.
|
|
*
|
|
* The license and distribution terms for this file may be
|
|
* found in the file LICENSE in this distribution or at
|
|
* http://www.rtems.org/license/LICENSE.
|
|
*/
|
|
|
|
#include <bsp.h>
|
|
#include <bsp/i2c.h>
|
|
#include <libchip/rtc.h>
|
|
#include "pcf8563.h"
|
|
|
|
/* Forward function declaration */
|
|
bool mpc5200_pcf8563_probe(int minor);
|
|
|
|
extern rtc_fns pcf8563_fns;
|
|
|
|
/* The following table configures the RTC drivers used in this BSP */
|
|
rtc_tbl RTC_Table[] = {
|
|
{
|
|
"/dev/rtc", /* sDeviceName */
|
|
RTC_CUSTOM, /* deviceType */
|
|
&pcf8563_fns, /* pDeviceFns */
|
|
mpc5200_pcf8563_probe, /* deviceProbe */
|
|
NULL, /* pDeviceParams */
|
|
0x01, /* ulCtrlPort1, for PCF8563-I2C bus number */
|
|
PCF8563_I2C_ADDRESS, /* ulDataPort, for PCF8563-I2C device addr */
|
|
NULL, /* getRegister - not applicable to PCF8563 */
|
|
NULL /* setRegister - not applicable to PCF8563 */
|
|
}
|
|
};
|
|
|
|
/* Some information used by the RTC driver */
|
|
|
|
#define NUM_RTCS (sizeof(RTC_Table)/sizeof(rtc_tbl))
|
|
|
|
size_t RTC_Count = NUM_RTCS;
|
|
|
|
/* mpc5200_pcf8563_probe --
|
|
* RTC presence probe function. Return TRUE, if device is present.
|
|
* Device presence checked by probe access to RTC device over I2C bus.
|
|
*
|
|
* PARAMETERS:
|
|
* minor - minor RTC device number
|
|
*
|
|
* RETURNS:
|
|
* TRUE, if RTC device is present
|
|
*/
|
|
bool
|
|
mpc5200_pcf8563_probe(int minor)
|
|
{
|
|
int try = 0;
|
|
i2c_message_status status;
|
|
rtc_tbl *rtc;
|
|
i2c_bus_number bus;
|
|
i2c_address addr;
|
|
|
|
if (minor >= NUM_RTCS)
|
|
return false;
|
|
|
|
rtc = RTC_Table + minor;
|
|
|
|
bus = rtc->ulCtrlPort1;
|
|
addr = rtc->ulDataPort;
|
|
do {
|
|
status = i2c_wrbyte(bus, addr, 0);
|
|
if (status == I2C_NO_DEVICE)
|
|
return false;
|
|
try++;
|
|
} while ((try < 15) && (status != I2C_SUCCESSFUL));
|
|
if (status == I2C_SUCCESSFUL)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|