lkml.org 
[lkml]   [2003]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Date
Subject[PATCH] update via-pmu driver
This patch forward-ports various fixes to the driver for the PMU
(power manager unit) on powermacs and powerbooks from 2.4, and in
particular, some improvements to the battery charge calculations.
From Ben Herrenschmidt.

Please apply. This patch depends on the patch to include/linux/pmu.h
that I sent earlier.

Paul.

diff -urN linux-2.5/drivers/macintosh/via-pmu.c linuxppc-2.5/drivers/macintosh/via-pmu.c
--- linux-2.5/drivers/macintosh/via-pmu.c 2003-02-25 19:16:43.000000000 +1100
+++ linuxppc-2.5/drivers/macintosh/via-pmu.c 2003-02-25 19:22:53.000000000 +1100
@@ -33,6 +33,7 @@
#include <linux/pm.h>
#include <linux/proc_fs.h>
#include <linux/init.h>
+#include <linux/interrupt.h>
#include <asm/prom.h>
#include <asm/machdep.h>
#include <asm/io.h>
@@ -343,10 +344,6 @@
} else
pmu_kind = PMU_UNKNOWN;

-#ifdef CONFIG_PMAC_PBOOK
- if (pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0)
- can_sleep = 1;
-#endif /* CONFIG_PMAC_PBOOK */
via = (volatile unsigned char *) ioremap(vias->addrs->address, 0x2000);

out_8(&via[IER], IER_CLR | 0x7f); /* disable all intrs */
@@ -405,6 +402,8 @@
bright_req_3.complete = 1;
#ifdef CONFIG_PMAC_PBOOK
batt_req.complete = 1;
+ if (pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0)
+ can_sleep = 1;
#endif

if (request_irq(vias->intrs[0].line, via_pmu_interrupt, 0, "VIA-PMU",
@@ -457,12 +456,20 @@

#ifdef CONFIG_PMAC_PBOOK
if (machine_is_compatible("AAPL,3400/2400") ||
- machine_is_compatible("AAPL,3500"))
+ machine_is_compatible("AAPL,3500")) {
+ int mb = pmac_call_feature(PMAC_FTR_GET_MB_INFO,
+ NULL, PMAC_MB_INFO_MODEL, 0);
pmu_battery_count = 1;
- else if (machine_is_compatible("AAPL,PowerBook1998") ||
- machine_is_compatible("PowerBook1,1"))
+ if (mb == PMAC_TYPE_COMET)
+ pmu_batteries[0].flags |= PMU_BATT_TYPE_COMET;
+ else
+ pmu_batteries[0].flags |= PMU_BATT_TYPE_HOOPER;
+ } else if (machine_is_compatible("AAPL,PowerBook1998") ||
+ machine_is_compatible("PowerBook1,1")) {
pmu_battery_count = 2;
- else {
+ pmu_batteries[0].flags |= PMU_BATT_TYPE_SMART;
+ pmu_batteries[1].flags |= PMU_BATT_TYPE_SMART;
+ } else {
struct device_node* prim = find_devices("power-mgt");
u32 *prim_info = NULL;
if (prim)
@@ -470,6 +477,9 @@
if (prim_info) {
/* Other stuffs here yet unknown */
pmu_battery_count = (prim_info[6] >> 16) & 0xff;
+ pmu_batteries[0].flags |= PMU_BATT_TYPE_SMART;
+ if (pmu_battery_count > 1)
+ pmu_batteries[1].flags |= PMU_BATT_TYPE_SMART;
}
}
#endif /* CONFIG_PMAC_PBOOK */
@@ -550,156 +560,30 @@
return 1;
}

-int
+int __pmac
pmu_get_model(void)
{
return pmu_kind;
}

-#ifdef CONFIG_PMAC_PBOOK
-
-/*
- * WARNING ! This code probably needs some debugging... -- BenH.
- */
-#ifdef NEW_OHARE_CODE
-static void __pmac
-done_battery_state_ohare(struct adb_request* req)
+static inline void wakeup_decrementer(void)
{
- unsigned int bat_flags = 0;
- int current = 0;
- unsigned int capa, max, voltage, time;
- int lrange[] = { 0, 275, 850, 1680, 2325,
- 2765, 3160, 3500, 3830, 4115,
- 4360, 4585, 4795, 4990, 5170,
- 5340, 5510, 5710, 5930, 6150,
- 6370, 6500
- };
-
- if (req->reply[0] & 0x01)
- pmu_power_flags |= PMU_PWR_AC_PRESENT;
- else
- pmu_power_flags &= ~PMU_PWR_AC_PRESENT;
+ set_dec(tb_ticks_per_jiffy);
+ /* No currently-supported powerbook has a 601,
+ * so use get_tbl, not native
+ */
+ last_jiffy_stamp(0) = tb_last_stamp = get_tbl();
+}

- if (req->reply[0] & 0x04) {
- int vb, i, j, k, charge, pcharge;
- bat_flags |= PMU_BATT_PRESENT;
- vb = (req->reply[1] << 8) | req->reply[2];
- voltage = ((vb * 2650) + 726650)/100;
- vb *= 100;
- current = req->reply[5];
- if ((req->reply[0] & 0x01) == 0 && (current > 200))
- vb += (current - 200) * 15;
- else if (req->reply[0] & 0x02)
- vb = (vb - 2000);
- i = (33000 - vb) / 10;
- j = i - (i % 100);
- k = j/100;
- if (k <= 0)
- charge = 0;
- else if (k >= 21)
- charge = 650000;
- else
- charge = (lrange[k + 1] - lrange[k]) * (i - j) + (lrange[k] * 100);
- charge = (1000 - charge / 650) / 10;
- if (req->reply[0] & 0x40) {
- pcharge = (req->reply[6] << 8) + req->reply[7];
- if (pcharge > 6500)
- pcharge = 6500;
- pcharge *= 100;
- pcharge = (1000 - pcharge / 650) / 10;
- if (pcharge < charge)
- charge = pcharge;
- }
- capa = charge;
- max = 100;
- time = (charge * 16440) / current;
- current = -current;
-
- } else
- capa = max = current = voltage = time = 0;

- if (req->reply[0] & 0x02)
- bat_flags |= PMU_BATT_CHARGING;
+#ifdef CONFIG_PMAC_PBOOK

- pmu_batteries[pmu_cur_battery].flags = bat_flags;
- pmu_batteries[pmu_cur_battery].charge = capa;
- pmu_batteries[pmu_cur_battery].max_charge = max;
- pmu_batteries[pmu_cur_battery].current = current;
- pmu_batteries[pmu_cur_battery].voltage = voltage;
- pmu_batteries[pmu_cur_battery].time_remaining = time;
-}
-#else /* NEW_OHARE_CODE */
+/* This new version of the code for 2400/3400/3500 powerbooks
+ * is inspired from the implementation in gkrellm-pmu
+ */
static void __pmac
done_battery_state_ohare(struct adb_request* req)
{
- unsigned int bat_flags = 0;
- int current = 0;
- unsigned int capa, max, voltage, time;
- int lrange[] = { 0, 275, 850, 1680, 2325,
- 2765, 3160, 3500, 3830, 4115,
- 4360, 4585, 4795, 4990, 5170,
- 5340, 5510, 5710, 5930, 6150,
- 6370, 6500
- };
-
- if (req->reply[0] & 0x01)
- pmu_power_flags |= PMU_PWR_AC_PRESENT;
- else
- pmu_power_flags &= ~PMU_PWR_AC_PRESENT;
-
- if (req->reply[0] & 0x04) {
- int vb, i, j, charge, pcharge;
- bat_flags |= PMU_BATT_PRESENT;
- vb = (req->reply[1] << 8) | req->reply[2];
- voltage = ((vb * 2650) + 726650)/100;
- current = *((signed char *)&req->reply[5]);
- if ((req->reply[0] & 0x01) == 0 && (current > 200))
- vb += (current - 200) * 15;
- else if (req->reply[0] & 0x02)
- vb = (vb - 10) * 100;
- i = (33000 - vb) / 10;
- j = i - (i % 100);
- if (j <= 0)
- charge = 0;
- else if (j >= 21)
- charge = 650000;
- else
- charge = (lrange[j + 1] - lrange[j]) * (i - j) + (lrange[j] * 100);
- charge = (1000 - charge / 650) / 10;
- if (req->reply[0] & 0x40) {
- pcharge = (req->reply[6] << 8) + req->reply[7];
- if (pcharge > 6500)
- pcharge = 6500;
- pcharge *= 100;
- pcharge = (1000 - pcharge / 650) / 10;
- if (pcharge < charge)
- charge = pcharge;
- }
- capa = charge;
- max = 100;
- time = (charge * 274) / current;
- current = -current;
-
- } else
- capa = max = current = voltage = time = 0;
-
- if ((req->reply[0] & 0x02) && (current > 0))
- bat_flags |= PMU_BATT_CHARGING;
- if (req->reply[0] & 0x04) /* CHECK THIS ONE */
- bat_flags |= PMU_BATT_PRESENT;
-
- pmu_batteries[pmu_cur_battery].flags = bat_flags;
- pmu_batteries[pmu_cur_battery].charge = capa;
- pmu_batteries[pmu_cur_battery].max_charge = max;
- pmu_batteries[pmu_cur_battery].current = current;
- pmu_batteries[pmu_cur_battery].voltage = voltage;
- pmu_batteries[pmu_cur_battery].time_remaining = time;
-}
-#endif /* NEW_OHARE_CODE */
-
- static void __pmac
-done_battery_state_comet(struct adb_request* req)
-{
/* format:
* [0] : flags
* 0x01 : AC indicator
@@ -718,57 +602,62 @@
* [6][7] : pcharge
* --tkoba
*/
+ unsigned int bat_flags = PMU_BATT_TYPE_HOOPER;
+ long pcharge, charge, vb, vmax, lmax;
+ long vmax_charging, vmax_charged;
+ long current, voltage, time, max;
+ int mb = pmac_call_feature(PMAC_FTR_GET_MB_INFO,
+ NULL, PMAC_MB_INFO_MODEL, 0);

- unsigned int bat_flags = 0;
- int current = 0;
- unsigned int max = 100;
- unsigned int charge, voltage, time;
- int lrange[] = { 0, 600, 750, 900, 1000, 1080,
- 1180, 1250, 1300, 1340, 1360,
- 1390, 1420, 1440, 1470, 1490,
- 1520, 1550, 1580, 1610, 1650,
- 1700
- };
-
if (req->reply[0] & 0x01)
pmu_power_flags |= PMU_PWR_AC_PRESENT;
else
pmu_power_flags &= ~PMU_PWR_AC_PRESENT;
+
+ if (mb == PMAC_TYPE_COMET) {
+ vmax_charged = 189;
+ vmax_charging = 213;
+ lmax = 6500;
+ } else {
+ vmax_charged = 330;
+ vmax_charging = 330;
+ lmax = 6500;
+ }
+ vmax = vmax_charged;

- if (req->reply[0] & 0x04) { /* battery exist */
- int vb, i;
+ /* If battery installed */
+ if (req->reply[0] & 0x04) {
bat_flags |= PMU_BATT_PRESENT;
+ if (req->reply[0] & 0x02)
+ bat_flags |= PMU_BATT_CHARGING;
vb = (req->reply[1] << 8) | req->reply[2];
- voltage = ((vb * 2650) + 726650)/100;
- vb *= 10;
+ voltage = (vb * 265 + 72665) / 10;
current = req->reply[5];
- if ((req->reply[0] & 0x01) == 0 && (current > 200))
- vb += ((current - 200) * 3); /* vb = 500<->1800 */
- else if (req->reply[0] & 0x02)
- vb = ((vb - 800) * 1700/13)/100; /* in charging vb = 1300<->2130 */
-
- if (req->reply[0] & 0x20) { /* full charged */
- charge = max;
- } else {
- if (lrange[21] < vb)
- charge = max;
- else {
- if (vb < lrange[1])
- charge = 0;
- else {
- for (i=21; vb < lrange[i]; --i);
- charge = (i * 100)/21;
- }
- }
- if (charge > max) charge = max;
+ if ((req->reply[0] & 0x01) == 0) {
+ if (current > 200)
+ vb += ((current - 200) * 15)/100;
+ } else if (req->reply[0] & 0x02) {
+ vb = (vb * 97) / 100;
+ vmax = vmax_charging;
+ }
+ charge = (100 * vb) / vmax;
+ if (req->reply[0] & 0x40) {
+ pcharge = (req->reply[6] << 8) + req->reply[7];
+ if (pcharge > lmax)
+ pcharge = lmax;
+ pcharge *= 100;
+ pcharge = 100 - pcharge / lmax;
+ if (pcharge < charge)
+ charge = pcharge;
}
- time = (charge * 72);
+ if (current > 0)
+ time = (charge * 16440) / current;
+ else
+ time = 0;
+ max = 100;
current = -current;
} else
- max = current = voltage = time = 0;
-
- if (req->reply[0] & 0x02)
- bat_flags |= PMU_BATT_CHARGING;
+ charge = max = current = voltage = time = 0;

pmu_batteries[pmu_cur_battery].flags = bat_flags;
pmu_batteries[pmu_cur_battery].charge = charge;
@@ -800,7 +689,7 @@
* [8][9] : voltage
*/

- unsigned int bat_flags = 0;
+ unsigned int bat_flags = PMU_BATT_TYPE_SMART;
int current;
unsigned int capa, max, voltage;

@@ -858,24 +747,17 @@
{
if (!batt_req.complete)
return;
- if (pmu_kind == PMU_OHARE_BASED) {
- int mb = pmac_call_feature(PMAC_FTR_GET_MB_INFO,
- NULL, PMAC_MB_INFO_MODEL, 0);
-
- if (mb == PMAC_TYPE_COMET)
- pmu_request(&batt_req, done_battery_state_comet,
- 1, PMU_BATTERY_STATE);
- else
- pmu_request(&batt_req, done_battery_state_ohare,
- 1, PMU_BATTERY_STATE);
- } else
+ if (pmu_kind == PMU_OHARE_BASED)
+ pmu_request(&batt_req, done_battery_state_ohare,
+ 1, PMU_BATTERY_STATE);
+ else
pmu_request(&batt_req, done_battery_state_smart,
2, PMU_SMART_BATTERY_STATE, pmu_cur_battery+1);
}

#endif /* CONFIG_PMAC_PBOOK */

-static int
+static int __pmac
proc_get_info(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
@@ -893,7 +775,7 @@
}

#ifdef CONFIG_PMAC_PBOOK
-static int
+static int __pmac
proc_get_batt(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
@@ -918,7 +800,7 @@
}
#endif /* CONFIG_PMAC_PBOOK */

-static int
+static int __pmac
proc_read_options(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
@@ -932,7 +814,7 @@
return p - page;
}

-static int
+static int __pmac
proc_write_options(struct file *file, const char *buffer,
unsigned long count, void *data)
{
@@ -972,7 +854,7 @@

#ifdef CONFIG_ADB
/* Send an ADB command */
-static int __openfirmware
+static int __pmac
pmu_send_request(struct adb_request *req, int sync)
{
int i, ret;
@@ -1052,7 +934,7 @@
}

/* Enable/disable autopolling */
-static int __openfirmware
+static int __pmac
pmu_adb_autopoll(int devs)
{
struct adb_request req;
@@ -1075,7 +957,7 @@
}

/* Reset the ADB bus */
-static int __openfirmware
+static int __pmac
pmu_adb_reset_bus(void)
{
struct adb_request req;
@@ -1137,7 +1019,7 @@
return pmu_queue_request(req);
}

-int __openfirmware
+int __pmac
pmu_queue_request(struct adb_request *req)
{
unsigned long flags;
@@ -1229,7 +1111,7 @@
(*done)(req);
}

-static void __openfirmware
+static void __pmac
pmu_start()
{
struct adb_request *req;
@@ -1342,7 +1224,7 @@
}

/* Interrupt data could be the result data from an ADB cmd */
-static void __openfirmware
+static void __pmac
pmu_handle_data(unsigned char *data, int len, struct pt_regs *regs)
{
asleep = 0;
@@ -1417,7 +1299,7 @@
}
}

-static struct adb_request* __openfirmware
+static struct adb_request* __pmac
pmu_sr_intr(struct pt_regs *regs)
{
struct adb_request *req;
@@ -1511,7 +1393,7 @@
return NULL;
}

-static void __openfirmware
+static void __pmac
via_pmu_interrupt(int irq, void *arg, struct pt_regs *regs)
{
unsigned long flags;
@@ -1561,10 +1443,10 @@
wait_for_ack();
send_byte(PMU_INT_ACK);
adb_int_pending = 0;
-no_free_slot:
} else if (current_req)
pmu_start();
}
+no_free_slot:
/* Mark the oldest buffer for flushing */
if (int_data_state[!int_data_last] == int_data_ready) {
int_data_state[!int_data_last] = int_data_flush;
@@ -1593,7 +1475,7 @@
}
}

-static void __openfirmware
+static void __pmac
gpio1_interrupt(int irq, void *arg, struct pt_regs *regs)
{
if ((in_8(gpio_reg + 0x9) & 0x02) == 0) {
@@ -1603,7 +1485,7 @@
}

#ifdef CONFIG_PMAC_BACKLIGHT
-static int backlight_to_bright[] = {
+static int backlight_to_bright[] __pmacdata = {
0x7f, 0x46, 0x42, 0x3e, 0x3a, 0x36, 0x32, 0x2e,
0x2a, 0x26, 0x22, 0x1e, 0x1a, 0x16, 0x12, 0x0e
};
@@ -1649,7 +1531,7 @@
}
#endif /* CONFIG_PMAC_BACKLIGHT */

-void __openfirmware
+void __pmac
pmu_enable_irled(int on)
{
struct adb_request req;
@@ -1665,7 +1547,7 @@
pmu_poll();
}

-void __openfirmware
+void __pmac
pmu_restart(void)
{
struct adb_request req;
@@ -1688,7 +1570,7 @@
;
}

-void __openfirmware
+void __pmac
pmu_shutdown(void)
{
struct adb_request req;
@@ -1723,7 +1605,7 @@
static LIST_HEAD(sleep_notifiers);

#ifdef CONFIG_PM
-static int
+static int __pmac
generic_notify_sleep(struct pmu_sleep_notifier *self, int when)
{
switch (when) {
@@ -1765,7 +1647,7 @@
}

/* Sleep is broadcast last-to-first */
-static int
+static int __pmac
broadcast_sleep(int when, int fallback)
{
int ret = PBOOK_SLEEP_OK;
@@ -1790,7 +1672,7 @@
}

/* Wake is broadcast first-to-last */
-static int
+static int __pmac
broadcast_wake(void)
{
int ret = PBOOK_SLEEP_OK;
@@ -1821,7 +1703,7 @@
} *pbook_pci_saves;
static int pbook_npci_saves;

-static void __openfirmware
+static void __pmac
pbook_alloc_pci_save(void)
{
int npci;
@@ -1838,7 +1720,7 @@
pbook_npci_saves = npci;
}

-static void __openfirmware
+static void __pmac
pbook_free_pci_save(void)
{
if (pbook_pci_saves == NULL)
@@ -1848,7 +1730,7 @@
pbook_npci_saves = 0;
}

-static void __openfirmware
+static void __pmac
pbook_pci_save(void)
{
struct pci_save *ps = pbook_pci_saves;
@@ -1879,7 +1761,7 @@
* during boot, it will be in the pci dev list. If it's disabled at this point
* (and it will probably be), then you can't access it's config space.
*/
-static void __openfirmware
+static void __pmac
pbook_pci_restore(void)
{
u16 cmd;
@@ -1927,7 +1809,7 @@

#ifdef DEBUG_SLEEP
/* N.B. This doesn't work on the 3400 */
-void
+void __pmac
pmu_blink(int n)
{
struct adb_request req;
@@ -1966,8 +1848,10 @@
* Put the powerbook to sleep.
*/

-static u32 save_via[8];
-static void save_via_state(void)
+static u32 save_via[8] __pmacdata;
+
+static void __pmac
+save_via_state(void)
{
save_via[0] = in_8(&via[ANH]);
save_via[1] = in_8(&via[DIRA]);
@@ -1978,7 +1862,8 @@
save_via[6] = in_8(&via[T1CL]);
save_via[7] = in_8(&via[T1CH]);
}
-static void restore_via_state(void)
+static void __pmac
+restore_via_state(void)
{
out_8(&via[ANH], save_via[0]);
out_8(&via[DIRA], save_via[1]);
@@ -1993,15 +1878,6 @@
out_8(&via[IER], IER_SET | SR_INT | CB1_INT);
}

-static inline void wakeup_decrementer(void)
-{
- set_dec(tb_ticks_per_jiffy);
- /* No currently-supported powerbook has a 601,
- * so use get_tbl, not native
- */
- last_jiffy_stamp(0) = tb_last_stamp = get_tbl();
-}
-
extern int sys_sync(void);

#define GRACKLE_PM (1<<7)
@@ -2009,7 +1885,8 @@
#define GRACKLE_NAP (1<<4)
#define GRACKLE_SLEEP (1<<3)

-int __openfirmware powerbook_sleep_G3(void)
+int __pmac
+powerbook_sleep_G3(void)
{
unsigned long save_l2cr;
unsigned short pmcr1;
@@ -2152,7 +2029,8 @@
return 0;
}

-int __openfirmware powerbook_sleep_Core99(void)
+static int __pmac
+powerbook_sleep_Core99(void)
{
unsigned long save_l2cr;
unsigned long save_l3cr;
@@ -2322,7 +2200,8 @@
#define PB3400_MEM_CTRL 0xf8000000
#define PB3400_MEM_CTRL_SLEEP 0x70

-int __openfirmware powerbook_sleep_3400(void)
+static int __pmac
+powerbook_sleep_3400(void)
{
int ret, i, x;
unsigned int hid0;
@@ -2463,9 +2342,10 @@
};

static LIST_HEAD(all_pmu_pvt);
-static spinlock_t all_pvt_lock = SPIN_LOCK_UNLOCKED;
+static spinlock_t all_pvt_lock __pmacdata = SPIN_LOCK_UNLOCKED;

-static void pmu_pass_intr(unsigned char *data, int len)
+static void __pmac
+pmu_pass_intr(unsigned char *data, int len)
{
struct pmu_private *pp;
struct list_head *list;
@@ -2493,7 +2373,8 @@
spin_unlock_irqrestore(&all_pvt_lock, flags);
}

-static int __openfirmware pmu_open(struct inode *inode, struct file *file)
+static int __pmac
+pmu_open(struct inode *inode, struct file *file)
{
struct pmu_private *pp;
unsigned long flags;
@@ -2514,7 +2395,8 @@
return 0;
}

-static ssize_t __openfirmware pmu_read(struct file *file, char *buf,
+static ssize_t __pmac
+pmu_read(struct file *file, char *buf,
size_t count, loff_t *ppos)
{
struct pmu_private *pp = file->private_data;
@@ -2566,13 +2448,15 @@
return ret;
}

-static ssize_t __openfirmware pmu_write(struct file *file, const char *buf,
+static ssize_t __pmac
+pmu_write(struct file *file, const char *buf,
size_t count, loff_t *ppos)
{
return 0;
}

-static unsigned int pmu_fpoll(struct file *filp, poll_table *wait)
+static unsigned int __pmac
+pmu_fpoll(struct file *filp, poll_table *wait)
{
struct pmu_private *pp = filp->private_data;
unsigned int mask = 0;
@@ -2588,7 +2472,8 @@
return mask;
}

-static int pmu_release(struct inode *inode, struct file *file)
+static int __pmac
+pmu_release(struct inode *inode, struct file *file)
{
struct pmu_private *pp = file->private_data;
unsigned long flags;
@@ -2613,7 +2498,8 @@
}

/* Note: removed __openfirmware here since it causes link errors */
-static int pmu_ioctl(struct inode * inode, struct file *filp,
+static int __pmac
+pmu_ioctl(struct inode * inode, struct file *filp,
u_int cmd, u_long arg)
{
struct pmu_private *pp = filp->private_data;
@@ -2687,7 +2573,7 @@
return -EINVAL;
}

-static struct file_operations pmu_device_fops = {
+static struct file_operations pmu_device_fops __pmacdata = {
.read = pmu_read,
.write = pmu_write,
.poll = pmu_fpoll,
@@ -2696,7 +2582,7 @@
.release = pmu_release,
};

-static struct miscdevice pmu_device = {
+static struct miscdevice pmu_device __pmacdata = {
PMU_MINOR, "pmu", &pmu_device_fops
};

@@ -2710,7 +2596,8 @@
#endif /* CONFIG_PMAC_PBOOK */

#ifdef DEBUG_SLEEP
-static inline void polled_handshake(volatile unsigned char *via)
+static inline void __pmac
+polled_handshake(volatile unsigned char *via)
{
via[B] &= ~TREQ; eieio();
while ((via[B] & TACK) != 0)
@@ -2720,14 +2607,16 @@
;
}

-static inline void polled_send_byte(volatile unsigned char *via, int x)
+static inline void __pmac
+polled_send_byte(volatile unsigned char *via, int x)
{
via[ACR] |= SR_OUT | SR_EXT; eieio();
via[SR] = x; eieio();
polled_handshake(via);
}

-static inline int polled_recv_byte(volatile unsigned char *via)
+static inline int __pmac
+polled_recv_byte(volatile unsigned char *via)
{
int x;

@@ -2738,7 +2627,7 @@
return x;
}

-int
+int __pmac
pmu_polled_request(struct adb_request *req)
{
unsigned long flags;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:34    [W:0.065 / U:0.424 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site