git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
arch
/
mips
/
sibyte
/
swarm
/
rtc_xicor1241.c
diff --git
a/arch/mips/sibyte/swarm/rtc_xicor1241.c
b/arch/mips/sibyte/swarm/rtc_xicor1241.c
index
981d21f
..
f4a1788
100644
(file)
--- a/
arch/mips/sibyte/swarm/rtc_xicor1241.c
+++ b/
arch/mips/sibyte/swarm/rtc_xicor1241.c
@@
-57,52
+57,52
@@
#define X1241_CCR_ADDRESS 0x6F
#define X1241_CCR_ADDRESS 0x6F
-#define SMB_CSR(reg)
((u8 *) (IOADDR(A_SMB_REGISTER(1, reg))
))
+#define SMB_CSR(reg)
IOADDR(A_SMB_REGISTER(1, reg
))
static int xicor_read(uint8_t addr)
{
static int xicor_read(uint8_t addr)
{
- while (
bus
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
+ while (
__raw
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
;
;
-
bus
_writeq((addr >> 8) & 0x7, SMB_CSR(R_SMB_CMD));
-
bus_writeq((addr & 0xff)
, SMB_CSR(R_SMB_DATA));
-
bus_writeq((V_SMB_ADDR(X1241_CCR_ADDRESS) | V_SMB_TT_WR2BYTE)
,
- SMB_CSR(R_SMB_START));
+
__raw
_writeq((addr >> 8) & 0x7, SMB_CSR(R_SMB_CMD));
+
__raw_writeq(addr & 0xff
, SMB_CSR(R_SMB_DATA));
+
__raw_writeq(V_SMB_ADDR(X1241_CCR_ADDRESS) | V_SMB_TT_WR2BYTE
,
+
SMB_CSR(R_SMB_START));
- while (
bus
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
+ while (
__raw
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
;
;
-
bus_writeq((V_SMB_ADDR(X1241_CCR_ADDRESS) | V_SMB_TT_RD1BYTE)
,
- SMB_CSR(R_SMB_START));
+
__raw_writeq(V_SMB_ADDR(X1241_CCR_ADDRESS) | V_SMB_TT_RD1BYTE
,
+
SMB_CSR(R_SMB_START));
- while (
bus
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
+ while (
__raw
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
;
;
- if (
bus
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_ERROR) {
+ if (
__raw
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_ERROR) {
/* Clear error bit by writing a 1 */
/* Clear error bit by writing a 1 */
-
bus
_writeq(M_SMB_ERROR, SMB_CSR(R_SMB_STATUS));
+
__raw
_writeq(M_SMB_ERROR, SMB_CSR(R_SMB_STATUS));
return -1;
}
return -1;
}
- return (
bus
_readq(SMB_CSR(R_SMB_DATA)) & 0xff);
+ return (
__raw
_readq(SMB_CSR(R_SMB_DATA)) & 0xff);
}
static int xicor_write(uint8_t addr, int b)
{
}
static int xicor_write(uint8_t addr, int b)
{
- while (
bus
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
+ while (
__raw
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
;
;
-
bus
_writeq(addr, SMB_CSR(R_SMB_CMD));
-
bus
_writeq((addr & 0xff) | ((b & 0xff) << 8), SMB_CSR(R_SMB_DATA));
-
bus
_writeq(V_SMB_ADDR(X1241_CCR_ADDRESS) | V_SMB_TT_WR3BYTE,
- SMB_CSR(R_SMB_START));
+
__raw
_writeq(addr, SMB_CSR(R_SMB_CMD));
+
__raw
_writeq((addr & 0xff) | ((b & 0xff) << 8), SMB_CSR(R_SMB_DATA));
+
__raw
_writeq(V_SMB_ADDR(X1241_CCR_ADDRESS) | V_SMB_TT_WR3BYTE,
+
SMB_CSR(R_SMB_START));
- while (
bus
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
+ while (
__raw
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
;
;
- if (
bus
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_ERROR) {
+ if (
__raw
_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_ERROR) {
/* Clear error bit by writing a 1 */
/* Clear error bit by writing a 1 */
-
bus
_writeq(M_SMB_ERROR, SMB_CSR(R_SMB_STATUS));
+
__raw
_writeq(M_SMB_ERROR, SMB_CSR(R_SMB_STATUS));
return -1;
} else {
return 0;
return -1;
} else {
return 0;
@@
-113,9
+113,11
@@
int xicor_set_time(unsigned long t)
{
struct rtc_time tm;
int tmp;
{
struct rtc_time tm;
int tmp;
+ unsigned long flags;
to_tm(t, &tm);
to_tm(t, &tm);
+ spin_lock_irqsave(&rtc_lock, flags);
/* unlock writes to the CCR */
xicor_write(X1241REG_SR, X1241REG_SR_WEL);
xicor_write(X1241REG_SR, X1241REG_SR_WEL | X1241REG_SR_RWEL);
/* unlock writes to the CCR */
xicor_write(X1241REG_SR, X1241REG_SR_WEL);
xicor_write(X1241REG_SR, X1241REG_SR_WEL | X1241REG_SR_RWEL);
@@
-160,6
+162,7
@@
int xicor_set_time(unsigned long t)
xicor_write(X1241REG_HR, tmp);
xicor_write(X1241REG_SR, 0);
xicor_write(X1241REG_HR, tmp);
xicor_write(X1241REG_SR, 0);
+ spin_unlock_irqrestore(&rtc_lock, flags);
return 0;
}
return 0;
}
@@
-167,7
+170,9
@@
int xicor_set_time(unsigned long t)
unsigned long xicor_get_time(void)
{
unsigned int year, mon, day, hour, min, sec, y2k;
unsigned long xicor_get_time(void)
{
unsigned int year, mon, day, hour, min, sec, y2k;
+ unsigned long flags;
+ spin_lock_irqsave(&rtc_lock, flags);
sec = xicor_read(X1241REG_SC);
min = xicor_read(X1241REG_MN);
hour = xicor_read(X1241REG_HR);
sec = xicor_read(X1241REG_SC);
min = xicor_read(X1241REG_MN);
hour = xicor_read(X1241REG_HR);
@@
-183,6
+188,7
@@
unsigned long xicor_get_time(void)
mon = xicor_read(X1241REG_MO);
year = xicor_read(X1241REG_YR);
y2k = xicor_read(X1241REG_Y2K);
mon = xicor_read(X1241REG_MO);
year = xicor_read(X1241REG_YR);
y2k = xicor_read(X1241REG_Y2K);
+ spin_unlock_irqrestore(&rtc_lock, flags);
sec = BCD2BIN(sec);
min = BCD2BIN(min);
sec = BCD2BIN(sec);
min = BCD2BIN(min);