mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6: (24 commits) [PARISC] Fix double free when removing HIL drivers [PARISC] Add atomic_sub_and_test [PARISC] Enabled some NLS modules in a500, b180 and c3000 defconfigs [PARISC] Kill duplicated EXPORT_SYMBOL warnings [PARISC] Move ioremap EXPORT_SYMBOL from parisc_ksyms.c [PARISC] Make local_t use atomic_long_t [PARISC] Update defconfigs [PARISC] Add PREEMPT support [PARISC] More useful readwrite lock helpers [PARISC] Convert HIL drivers to use input_allocate_device [PARISC] Fixup CONFIG_EISA a bit [PARISC] getsockopt should be ENTRY_COMP [PARISC] Remove obsolete CONFIG_DEBUG_IOREMAP [PARISC] Temporary FIXME for ioremapping EISA regions [PARISC] Enable ioremap functionality unconditionally [PARISC] Fix stifb with IOREMAP and a 64-bit kernel [PARISC] Add CONFIG_HPPA_IOREMAP to conditionally enable ioremap [PARISC] Add STRICT_MM_TYPECHECKS [PARISC] Fix IOREMAP with a 64-bit kernel [PARISC] Add parisc implementation of flush_kernel_dcache_page() ...
This commit is contained in:
commit
ce362c0092
46 changed files with 625 additions and 805 deletions
|
|
@ -66,7 +66,7 @@ static unsigned int hil_kbd_set3[HIL_KEYCODES_SET3_TBLSIZE] =
|
|||
static char hil_language[][16] = { HIL_LOCALE_MAP };
|
||||
|
||||
struct hil_kbd {
|
||||
struct input_dev dev;
|
||||
struct input_dev *dev;
|
||||
struct serio *serio;
|
||||
|
||||
/* Input buffer and index for packets from HIL bus. */
|
||||
|
|
@ -86,7 +86,7 @@ struct hil_kbd {
|
|||
/* Process a complete packet after transfer from the HIL */
|
||||
static void hil_kbd_process_record(struct hil_kbd *kbd)
|
||||
{
|
||||
struct input_dev *dev = &kbd->dev;
|
||||
struct input_dev *dev = kbd->dev;
|
||||
hil_packet *data = kbd->data;
|
||||
hil_packet p;
|
||||
int idx, i, cnt;
|
||||
|
|
@ -240,8 +240,8 @@ static void hil_kbd_disconnect(struct serio *serio)
|
|||
return;
|
||||
}
|
||||
|
||||
input_unregister_device(&kbd->dev);
|
||||
serio_close(serio);
|
||||
input_unregister_device(kbd->dev);
|
||||
kfree(kbd);
|
||||
}
|
||||
|
||||
|
|
@ -251,16 +251,18 @@ static int hil_kbd_connect(struct serio *serio, struct serio_driver *drv)
|
|||
uint8_t did, *idd;
|
||||
int i;
|
||||
|
||||
kbd = kmalloc(sizeof(*kbd), GFP_KERNEL);
|
||||
kbd = kzalloc(sizeof(*kbd), GFP_KERNEL);
|
||||
if (!kbd)
|
||||
return -ENOMEM;
|
||||
memset(kbd, 0, sizeof(struct hil_kbd));
|
||||
|
||||
kbd->dev = input_allocate_device();
|
||||
if (!kbd->dev) goto bail1;
|
||||
kbd->dev->private = kbd;
|
||||
|
||||
if (serio_open(serio, drv)) goto bail0;
|
||||
|
||||
serio_set_drvdata(serio, kbd);
|
||||
kbd->serio = serio;
|
||||
kbd->dev.private = kbd;
|
||||
|
||||
init_MUTEX_LOCKED(&(kbd->sem));
|
||||
|
||||
|
|
@ -302,38 +304,38 @@ static int hil_kbd_connect(struct serio *serio, struct serio_driver *drv)
|
|||
did, hil_language[did & HIL_IDD_DID_TYPE_KB_LANG_MASK]);
|
||||
break;
|
||||
default:
|
||||
goto bail1;
|
||||
goto bail2;
|
||||
}
|
||||
|
||||
if(HIL_IDD_NUM_BUTTONS(idd) || HIL_IDD_NUM_AXES_PER_SET(*idd)) {
|
||||
printk(KERN_INFO PREFIX "keyboards only, no combo devices supported.\n");
|
||||
goto bail1;
|
||||
goto bail2;
|
||||
}
|
||||
|
||||
|
||||
kbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
|
||||
kbd->dev.ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
|
||||
kbd->dev.keycodemax = HIL_KEYCODES_SET1_TBLSIZE;
|
||||
kbd->dev.keycodesize = sizeof(hil_kbd_set1[0]);
|
||||
kbd->dev.keycode = hil_kbd_set1;
|
||||
kbd->dev.name = strlen(kbd->rnm) ? kbd->rnm : HIL_GENERIC_NAME;
|
||||
kbd->dev.phys = "hpkbd/input0"; /* XXX */
|
||||
kbd->dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
|
||||
kbd->dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
|
||||
kbd->dev->keycodemax = HIL_KEYCODES_SET1_TBLSIZE;
|
||||
kbd->dev->keycodesize = sizeof(hil_kbd_set1[0]);
|
||||
kbd->dev->keycode = hil_kbd_set1;
|
||||
kbd->dev->name = strlen(kbd->rnm) ? kbd->rnm : HIL_GENERIC_NAME;
|
||||
kbd->dev->phys = "hpkbd/input0"; /* XXX */
|
||||
|
||||
kbd->dev.id.bustype = BUS_HIL;
|
||||
kbd->dev.id.vendor = PCI_VENDOR_ID_HP;
|
||||
kbd->dev.id.product = 0x0001; /* TODO: get from kbd->rsc */
|
||||
kbd->dev.id.version = 0x0100; /* TODO: get from kbd->rsc */
|
||||
kbd->dev.dev = &serio->dev;
|
||||
kbd->dev->id.bustype = BUS_HIL;
|
||||
kbd->dev->id.vendor = PCI_VENDOR_ID_HP;
|
||||
kbd->dev->id.product = 0x0001; /* TODO: get from kbd->rsc */
|
||||
kbd->dev->id.version = 0x0100; /* TODO: get from kbd->rsc */
|
||||
kbd->dev->dev = &serio->dev;
|
||||
|
||||
for (i = 0; i < 128; i++) {
|
||||
set_bit(hil_kbd_set1[i], kbd->dev.keybit);
|
||||
set_bit(hil_kbd_set3[i], kbd->dev.keybit);
|
||||
set_bit(hil_kbd_set1[i], kbd->dev->keybit);
|
||||
set_bit(hil_kbd_set3[i], kbd->dev->keybit);
|
||||
}
|
||||
clear_bit(0, kbd->dev.keybit);
|
||||
clear_bit(0, kbd->dev->keybit);
|
||||
|
||||
input_register_device(&kbd->dev);
|
||||
input_register_device(kbd->dev);
|
||||
printk(KERN_INFO "input: %s, ID: %d\n",
|
||||
kbd->dev.name, did);
|
||||
kbd->dev->name, did);
|
||||
|
||||
serio->write(serio, 0);
|
||||
serio->write(serio, 0);
|
||||
|
|
@ -343,8 +345,10 @@ static int hil_kbd_connect(struct serio *serio, struct serio_driver *drv)
|
|||
up(&(kbd->sem));
|
||||
|
||||
return 0;
|
||||
bail1:
|
||||
bail2:
|
||||
serio_close(serio);
|
||||
bail1:
|
||||
input_free_device(kbd->dev);
|
||||
bail0:
|
||||
kfree(kbd);
|
||||
serio_set_drvdata(serio, NULL);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 1998 Philip Blundell <philb@gnu.org>
|
||||
* Copyright (C) 1999 Matthew Wilcox <willy@bofh.ai>
|
||||
* Copyright (C) 1999-2003 Helge Deller <deller@gmx.de>
|
||||
* Copyright (C) 1999-2006 Helge Deller <deller@gmx.de>
|
||||
*
|
||||
* Very basic HP Human Interface Loop (HIL) driver.
|
||||
* This driver handles the keyboard on HP300 (m68k) and on some
|
||||
|
|
@ -90,7 +90,7 @@ static unsigned int hphilkeyb_keycode[HIL_KEYCODES_SET1_TBLSIZE] =
|
|||
|
||||
/* HIL structure */
|
||||
static struct {
|
||||
struct input_dev dev;
|
||||
struct input_dev *dev;
|
||||
|
||||
unsigned int curdev;
|
||||
|
||||
|
|
@ -117,7 +117,7 @@ static void poll_finished(void)
|
|||
down = (hil_dev.data[1] & 1) == 0;
|
||||
scode = hil_dev.data[1] >> 1;
|
||||
key = hphilkeyb_keycode[scode];
|
||||
input_report_key(&hil_dev.dev, key, down);
|
||||
input_report_key(hil_dev.dev, key, down);
|
||||
break;
|
||||
}
|
||||
hil_dev.curdev = 0;
|
||||
|
|
@ -207,9 +207,14 @@ hil_keyb_init(void)
|
|||
unsigned int i, kbid;
|
||||
wait_queue_head_t hil_wait;
|
||||
|
||||
if (hil_dev.dev.id.bustype) {
|
||||
if (hil_dev.dev) {
|
||||
return -ENODEV; /* already initialized */
|
||||
}
|
||||
|
||||
hil_dev.dev = input_allocate_device();
|
||||
if (!hil_dev.dev)
|
||||
return -ENOMEM;
|
||||
hil_dev.dev->private = &hil_dev;
|
||||
|
||||
#if defined(CONFIG_HP300)
|
||||
if (!hwreg_present((void *)(HILBASE + HIL_DATA)))
|
||||
|
|
@ -247,28 +252,26 @@ hil_keyb_init(void)
|
|||
c = 0;
|
||||
hil_do(HIL_WRITEKBDSADR, &c, 1);
|
||||
|
||||
init_input_dev(&hil_dev.dev);
|
||||
|
||||
for (i = 0; i < HIL_KEYCODES_SET1_TBLSIZE; i++)
|
||||
if (hphilkeyb_keycode[i] != KEY_RESERVED)
|
||||
set_bit(hphilkeyb_keycode[i], hil_dev.dev.keybit);
|
||||
set_bit(hphilkeyb_keycode[i], hil_dev.dev->keybit);
|
||||
|
||||
hil_dev.dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
|
||||
hil_dev.dev.ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
|
||||
hil_dev.dev.keycodemax = HIL_KEYCODES_SET1_TBLSIZE;
|
||||
hil_dev.dev.keycodesize = sizeof(hphilkeyb_keycode[0]);
|
||||
hil_dev.dev.keycode = hphilkeyb_keycode;
|
||||
hil_dev.dev.name = "HIL keyboard";
|
||||
hil_dev.dev.phys = "hpkbd/input0";
|
||||
hil_dev.dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
|
||||
hil_dev.dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
|
||||
hil_dev.dev->keycodemax = HIL_KEYCODES_SET1_TBLSIZE;
|
||||
hil_dev.dev->keycodesize = sizeof(hphilkeyb_keycode[0]);
|
||||
hil_dev.dev->keycode = hphilkeyb_keycode;
|
||||
hil_dev.dev->name = "HIL keyboard";
|
||||
hil_dev.dev->phys = "hpkbd/input0";
|
||||
|
||||
hil_dev.dev.id.bustype = BUS_HIL;
|
||||
hil_dev.dev.id.vendor = PCI_VENDOR_ID_HP;
|
||||
hil_dev.dev.id.product = 0x0001;
|
||||
hil_dev.dev.id.version = 0x0010;
|
||||
hil_dev.dev->id.bustype = BUS_HIL;
|
||||
hil_dev.dev->id.vendor = PCI_VENDOR_ID_HP;
|
||||
hil_dev.dev->id.product = 0x0001;
|
||||
hil_dev.dev->id.version = 0x0010;
|
||||
|
||||
input_register_device(&hil_dev.dev);
|
||||
input_register_device(hil_dev.dev);
|
||||
printk(KERN_INFO "input: %s, ID %d at 0x%08lx (irq %d) found and attached\n",
|
||||
hil_dev.dev.name, kbid, HILBASE, HIL_IRQ);
|
||||
hil_dev.dev->name, kbid, HILBASE, HIL_IRQ);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -329,7 +332,9 @@ static void __exit hil_exit(void)
|
|||
/* Turn off interrupts */
|
||||
hil_do(HIL_INTOFF, NULL, 0);
|
||||
|
||||
input_unregister_device(&hil_dev.dev);
|
||||
input_unregister_device(hil_dev.dev);
|
||||
|
||||
hil_dev.dev = NULL;
|
||||
|
||||
#if defined(CONFIG_PARISC)
|
||||
unregister_parisc_driver(&hil_driver);
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ MODULE_LICENSE("Dual BSD/GPL");
|
|||
#define HIL_PTR_MAX_LENGTH 16
|
||||
|
||||
struct hil_ptr {
|
||||
struct input_dev dev;
|
||||
struct input_dev *dev;
|
||||
struct serio *serio;
|
||||
|
||||
/* Input buffer and index for packets from HIL bus. */
|
||||
|
|
@ -79,7 +79,7 @@ struct hil_ptr {
|
|||
/* Process a complete packet after transfer from the HIL */
|
||||
static void hil_ptr_process_record(struct hil_ptr *ptr)
|
||||
{
|
||||
struct input_dev *dev = &ptr->dev;
|
||||
struct input_dev *dev = ptr->dev;
|
||||
hil_packet *data = ptr->data;
|
||||
hil_packet p;
|
||||
int idx, i, cnt, laxis;
|
||||
|
|
@ -148,12 +148,12 @@ static void hil_ptr_process_record(struct hil_ptr *ptr)
|
|||
if (absdev) {
|
||||
val = lo + (hi<<8);
|
||||
#ifdef TABLET_AUTOADJUST
|
||||
if (val < ptr->dev.absmin[ABS_X + i])
|
||||
ptr->dev.absmin[ABS_X + i] = val;
|
||||
if (val > ptr->dev.absmax[ABS_X + i])
|
||||
ptr->dev.absmax[ABS_X + i] = val;
|
||||
if (val < dev->absmin[ABS_X + i])
|
||||
dev->absmin[ABS_X + i] = val;
|
||||
if (val > dev->absmax[ABS_X + i])
|
||||
dev->absmax[ABS_X + i] = val;
|
||||
#endif
|
||||
if (i%3) val = ptr->dev.absmax[ABS_X + i] - val;
|
||||
if (i%3) val = dev->absmax[ABS_X + i] - val;
|
||||
input_report_abs(dev, ABS_X + i, val);
|
||||
} else {
|
||||
val = (int) (((int8_t)lo) | ((int8_t)hi<<8));
|
||||
|
|
@ -233,26 +233,29 @@ static void hil_ptr_disconnect(struct serio *serio)
|
|||
return;
|
||||
}
|
||||
|
||||
input_unregister_device(&ptr->dev);
|
||||
serio_close(serio);
|
||||
input_unregister_device(ptr->dev);
|
||||
kfree(ptr);
|
||||
}
|
||||
|
||||
static int hil_ptr_connect(struct serio *serio, struct serio_driver *driver)
|
||||
{
|
||||
struct hil_ptr *ptr;
|
||||
char *txt;
|
||||
unsigned int i, naxsets, btntype;
|
||||
uint8_t did, *idd;
|
||||
struct hil_ptr *ptr;
|
||||
char *txt;
|
||||
unsigned int i, naxsets, btntype;
|
||||
uint8_t did, *idd;
|
||||
|
||||
if (!(ptr = kmalloc(sizeof(struct hil_ptr), GFP_KERNEL))) return -ENOMEM;
|
||||
memset(ptr, 0, sizeof(struct hil_ptr));
|
||||
if (!(ptr = kzalloc(sizeof(struct hil_ptr), GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
|
||||
if (serio_open(serio, driver)) goto bail0;
|
||||
ptr->dev = input_allocate_device();
|
||||
if (!ptr->dev) goto bail0;
|
||||
ptr->dev->private = ptr;
|
||||
|
||||
if (serio_open(serio, driver)) goto bail1;
|
||||
|
||||
serio_set_drvdata(serio, ptr);
|
||||
ptr->serio = serio;
|
||||
ptr->dev.private = ptr;
|
||||
|
||||
init_MUTEX_LOCKED(&(ptr->sem));
|
||||
|
||||
|
|
@ -283,25 +286,24 @@ static int hil_ptr_connect(struct serio *serio, struct serio_driver *driver)
|
|||
|
||||
up(&(ptr->sem));
|
||||
|
||||
init_input_dev(&ptr->dev);
|
||||
did = ptr->idd[0];
|
||||
idd = ptr->idd + 1;
|
||||
txt = "unknown";
|
||||
if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_REL) {
|
||||
ptr->dev.evbit[0] = BIT(EV_REL);
|
||||
ptr->dev->evbit[0] = BIT(EV_REL);
|
||||
txt = "relative";
|
||||
}
|
||||
|
||||
if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_ABS) {
|
||||
ptr->dev.evbit[0] = BIT(EV_ABS);
|
||||
ptr->dev->evbit[0] = BIT(EV_ABS);
|
||||
txt = "absolute";
|
||||
}
|
||||
if (!ptr->dev.evbit[0]) {
|
||||
goto bail1;
|
||||
if (!ptr->dev->evbit[0]) {
|
||||
goto bail2;
|
||||
}
|
||||
|
||||
ptr->nbtn = HIL_IDD_NUM_BUTTONS(idd);
|
||||
if (ptr->nbtn) ptr->dev.evbit[0] |= BIT(EV_KEY);
|
||||
if (ptr->nbtn) ptr->dev->evbit[0] |= BIT(EV_KEY);
|
||||
|
||||
naxsets = HIL_IDD_NUM_AXSETS(*idd);
|
||||
ptr->naxes = HIL_IDD_NUM_AXES_PER_SET(*idd);
|
||||
|
|
@ -325,7 +327,7 @@ static int hil_ptr_connect(struct serio *serio, struct serio_driver *driver)
|
|||
btntype = BTN_MOUSE;
|
||||
|
||||
for (i = 0; i < ptr->nbtn; i++) {
|
||||
set_bit(btntype | i, ptr->dev.keybit);
|
||||
set_bit(btntype | i, ptr->dev->keybit);
|
||||
ptr->btnmap[i] = btntype | i;
|
||||
}
|
||||
|
||||
|
|
@ -337,50 +339,52 @@ static int hil_ptr_connect(struct serio *serio, struct serio_driver *driver)
|
|||
|
||||
if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_REL) {
|
||||
for (i = 0; i < ptr->naxes; i++) {
|
||||
set_bit(REL_X + i, ptr->dev.relbit);
|
||||
set_bit(REL_X + i, ptr->dev->relbit);
|
||||
}
|
||||
for (i = 3; (i < ptr->naxes + 3) && (naxsets > 1); i++) {
|
||||
set_bit(REL_X + i, ptr->dev.relbit);
|
||||
set_bit(REL_X + i, ptr->dev->relbit);
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < ptr->naxes; i++) {
|
||||
set_bit(ABS_X + i, ptr->dev.absbit);
|
||||
ptr->dev.absmin[ABS_X + i] = 0;
|
||||
ptr->dev.absmax[ABS_X + i] =
|
||||
set_bit(ABS_X + i, ptr->dev->absbit);
|
||||
ptr->dev->absmin[ABS_X + i] = 0;
|
||||
ptr->dev->absmax[ABS_X + i] =
|
||||
HIL_IDD_AXIS_MAX((ptr->idd + 1), i);
|
||||
}
|
||||
for (i = 3; (i < ptr->naxes + 3) && (naxsets > 1); i++) {
|
||||
set_bit(ABS_X + i, ptr->dev.absbit);
|
||||
ptr->dev.absmin[ABS_X + i] = 0;
|
||||
ptr->dev.absmax[ABS_X + i] =
|
||||
set_bit(ABS_X + i, ptr->dev->absbit);
|
||||
ptr->dev->absmin[ABS_X + i] = 0;
|
||||
ptr->dev->absmax[ABS_X + i] =
|
||||
HIL_IDD_AXIS_MAX((ptr->idd + 1), (i - 3));
|
||||
}
|
||||
#ifdef TABLET_AUTOADJUST
|
||||
for (i = 0; i < ABS_MAX; i++) {
|
||||
int diff = ptr->dev.absmax[ABS_X + i] / 10;
|
||||
ptr->dev.absmin[ABS_X + i] += diff;
|
||||
ptr->dev.absmax[ABS_X + i] -= diff;
|
||||
int diff = ptr->dev->absmax[ABS_X + i] / 10;
|
||||
ptr->dev->absmin[ABS_X + i] += diff;
|
||||
ptr->dev->absmax[ABS_X + i] -= diff;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
ptr->dev.name = strlen(ptr->rnm) ? ptr->rnm : HIL_GENERIC_NAME;
|
||||
ptr->dev->name = strlen(ptr->rnm) ? ptr->rnm : HIL_GENERIC_NAME;
|
||||
|
||||
ptr->dev.id.bustype = BUS_HIL;
|
||||
ptr->dev.id.vendor = PCI_VENDOR_ID_HP;
|
||||
ptr->dev.id.product = 0x0001; /* TODO: get from ptr->rsc */
|
||||
ptr->dev.id.version = 0x0100; /* TODO: get from ptr->rsc */
|
||||
ptr->dev.dev = &serio->dev;
|
||||
ptr->dev->id.bustype = BUS_HIL;
|
||||
ptr->dev->id.vendor = PCI_VENDOR_ID_HP;
|
||||
ptr->dev->id.product = 0x0001; /* TODO: get from ptr->rsc */
|
||||
ptr->dev->id.version = 0x0100; /* TODO: get from ptr->rsc */
|
||||
ptr->dev->dev = &serio->dev;
|
||||
|
||||
input_register_device(&ptr->dev);
|
||||
input_register_device(ptr->dev);
|
||||
printk(KERN_INFO "input: %s (%s), ID: %d\n",
|
||||
ptr->dev.name,
|
||||
ptr->dev->name,
|
||||
(btntype == BTN_MOUSE) ? "HIL mouse":"HIL tablet or touchpad",
|
||||
did);
|
||||
|
||||
return 0;
|
||||
bail1:
|
||||
bail2:
|
||||
serio_close(serio);
|
||||
bail1:
|
||||
input_free_device(ptr->dev);
|
||||
bail0:
|
||||
kfree(ptr);
|
||||
serio_set_drvdata(serio, NULL);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* drivers/input/serio/gscps2.c
|
||||
*
|
||||
* Copyright (c) 2004 Helge Deller <deller@gmx.de>
|
||||
* Copyright (c) 2004-2006 Helge Deller <deller@gmx.de>
|
||||
* Copyright (c) 2002 Laurent Canet <canetl@esiee.fr>
|
||||
* Copyright (c) 2002 Thibaut Varene <varenet@parisc-linux.org>
|
||||
*
|
||||
|
|
@ -354,7 +354,7 @@ static int __init gscps2_probe(struct parisc_device *dev)
|
|||
memset(serio, 0, sizeof(struct serio));
|
||||
ps2port->port = serio;
|
||||
ps2port->padev = dev;
|
||||
ps2port->addr = ioremap(hpa, GSC_STATUS + 4);
|
||||
ps2port->addr = ioremap_nocache(hpa, GSC_STATUS + 4);
|
||||
spin_lock_init(&ps2port->lock);
|
||||
|
||||
gscps2_reset(ps2port);
|
||||
|
|
|
|||
|
|
@ -1560,7 +1560,7 @@ static int ccio_probe(struct parisc_device *dev)
|
|||
*ioc_p = ioc;
|
||||
|
||||
ioc->hw_path = dev->hw_path;
|
||||
ioc->ioc_regs = ioremap(dev->hpa.start, 4096);
|
||||
ioc->ioc_regs = ioremap_nocache(dev->hpa.start, 4096);
|
||||
ccio_ioc_init(ioc);
|
||||
ccio_init_resources(ioc);
|
||||
hppa_dma_ops = &ccio_ops;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
** (c) Copyright 1999 SuSE GmbH
|
||||
** (c) Copyright 1999,2000 Hewlett-Packard Company
|
||||
** (c) Copyright 2000 Grant Grundler
|
||||
** (c) Copyright 2006 Helge Deller
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -785,7 +786,7 @@ dino_bridge_init(struct dino_device *dino_dev, const char *name)
|
|||
if((io_addr & (1 << i)) == 0)
|
||||
continue;
|
||||
|
||||
start = (unsigned long)(signed int)(0xf0000000 | (i << 23));
|
||||
start = F_EXTEND(0xf0000000UL) | (i << 23);
|
||||
end = start + 8 * 1024 * 1024 - 1;
|
||||
|
||||
DBG("DINO RANGE %d is at 0x%lx-0x%lx\n", count,
|
||||
|
|
@ -996,7 +997,7 @@ static int __init dino_probe(struct parisc_device *dev)
|
|||
}
|
||||
|
||||
dino_dev->hba.dev = dev;
|
||||
dino_dev->hba.base_addr = ioremap(hpa, 4096);
|
||||
dino_dev->hba.base_addr = ioremap_nocache(hpa, 4096);
|
||||
dino_dev->hba.lmmio_space_offset = 0; /* CPU addrs == bus addrs */
|
||||
spin_lock_init(&dino_dev->dinosaur_pen);
|
||||
dino_dev->hba.iommu = ccio_get_iommu(dev);
|
||||
|
|
|
|||
|
|
@ -366,7 +366,7 @@ static int __devinit eisa_probe(struct parisc_device *dev)
|
|||
eisa_dev.eeprom_addr = MIRAGE_EEPROM_BASE_ADDR;
|
||||
}
|
||||
}
|
||||
eisa_eeprom_addr = ioremap(eisa_dev.eeprom_addr, HPEE_MAX_LENGTH);
|
||||
eisa_eeprom_addr = ioremap_nocache(eisa_dev.eeprom_addr, HPEE_MAX_LENGTH);
|
||||
result = eisa_enumerator(eisa_dev.eeprom_addr, &eisa_dev.hba.io_space,
|
||||
&eisa_dev.hba.lmmio_space);
|
||||
init_eisa_pic();
|
||||
|
|
|
|||
|
|
@ -879,7 +879,7 @@ void *iosapic_register(unsigned long hpa)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
isi->addr = ioremap(hpa, 4096);
|
||||
isi->addr = ioremap_nocache(hpa, 4096);
|
||||
isi->isi_hpa = hpa;
|
||||
isi->isi_version = iosapic_rd_version(isi);
|
||||
isi->isi_num_vectors = IOSAPIC_IRDT_MAX_ENTRY(isi->isi_version) + 1;
|
||||
|
|
|
|||
|
|
@ -1213,7 +1213,7 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
|
|||
** Postable I/O port space is per PCI host adapter.
|
||||
** base of 64MB PIOP region
|
||||
*/
|
||||
lba_dev->iop_base = ioremap(p->start, 64 * 1024 * 1024);
|
||||
lba_dev->iop_base = ioremap_nocache(p->start, 64 * 1024 * 1024);
|
||||
|
||||
sprintf(lba_dev->hba.io_name, "PCI%02lx Ports",
|
||||
lba_dev->hba.bus_num.start);
|
||||
|
|
@ -1525,7 +1525,7 @@ lba_driver_probe(struct parisc_device *dev)
|
|||
u32 func_class;
|
||||
void *tmp_obj;
|
||||
char *version;
|
||||
void __iomem *addr = ioremap(dev->hpa.start, 4096);
|
||||
void __iomem *addr = ioremap_nocache(dev->hpa.start, 4096);
|
||||
|
||||
/* Read HW Rev First */
|
||||
func_class = READ_REG32(addr + LBA_FCLASS);
|
||||
|
|
@ -1619,7 +1619,7 @@ lba_driver_probe(struct parisc_device *dev)
|
|||
} else {
|
||||
if (!astro_iop_base) {
|
||||
/* Sprockets PDC uses NPIOP region */
|
||||
astro_iop_base = ioremap(LBA_PORT_BASE, 64 * 1024);
|
||||
astro_iop_base = ioremap_nocache(LBA_PORT_BASE, 64 * 1024);
|
||||
pci_port = &lba_astro_port_ops;
|
||||
}
|
||||
|
||||
|
|
@ -1700,7 +1700,7 @@ void __init lba_init(void)
|
|||
*/
|
||||
void lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask)
|
||||
{
|
||||
void __iomem * base_addr = ioremap(lba->hpa.start, 4096);
|
||||
void __iomem * base_addr = ioremap_nocache(lba->hpa.start, 4096);
|
||||
|
||||
imask <<= 2; /* adjust for hints - 2 more bits */
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,8 @@
|
|||
* Copyright (C) 2005-2006 Thibaut VARENE <varenet@parisc-linux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
* it under the terms of the GNU General Public License, version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
|
|
|||
|
|
@ -1642,9 +1642,9 @@ sba_ioc_init(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
**
|
||||
**************************************************************************/
|
||||
|
||||
static void __iomem *ioc_remap(struct sba_device *sba_dev, int offset)
|
||||
static void __iomem *ioc_remap(struct sba_device *sba_dev, unsigned int offset)
|
||||
{
|
||||
return ioremap(sba_dev->dev->hpa.start + offset, SBA_FUNC_SIZE);
|
||||
return ioremap_nocache(sba_dev->dev->hpa.start + offset, SBA_FUNC_SIZE);
|
||||
}
|
||||
|
||||
static void sba_hw_init(struct sba_device *sba_dev)
|
||||
|
|
@ -2040,7 +2040,7 @@ sba_driver_callback(struct parisc_device *dev)
|
|||
u32 func_class;
|
||||
int i;
|
||||
char *version;
|
||||
void __iomem *sba_addr = ioremap(dev->hpa.start, SBA_FUNC_SIZE);
|
||||
void __iomem *sba_addr = ioremap_nocache(dev->hpa.start, SBA_FUNC_SIZE);
|
||||
struct proc_dir_entry *info_entry, *bitmap_entry, *root;
|
||||
|
||||
sba_dump_ranges(sba_addr);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
* (C) Copyright 2001 John Marvin <jsm fc hp com>
|
||||
* (C) Copyright 2003 Grant Grundler <grundler parisc-linux org>
|
||||
* (C) Copyright 2005 Kyle McMartin <kyle@parisc-linux.org>
|
||||
* (C) Copyright 2006 Helge Deller <deller@gmx.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
|
|
@ -388,43 +389,34 @@ int superio_fixup_irq(struct pci_dev *pcidev)
|
|||
return local_irq;
|
||||
}
|
||||
|
||||
static struct uart_port serial[] = {
|
||||
{
|
||||
.iotype = UPIO_PORT,
|
||||
.line = 0,
|
||||
.type = PORT_16550A,
|
||||
.uartclk = 115200*16,
|
||||
.fifosize = 16,
|
||||
},
|
||||
{
|
||||
.iotype = UPIO_PORT,
|
||||
.line = 1,
|
||||
.type = PORT_16550A,
|
||||
.uartclk = 115200*16,
|
||||
.fifosize = 16,
|
||||
}
|
||||
};
|
||||
|
||||
static void __devinit superio_serial_init(void)
|
||||
{
|
||||
#ifdef CONFIG_SERIAL_8250
|
||||
int retval;
|
||||
|
||||
serial[0].iobase = sio_dev.sp1_base;
|
||||
serial[0].irq = SP1_IRQ;
|
||||
spin_lock_init(&serial[0].lock);
|
||||
struct uart_port serial_port;
|
||||
|
||||
retval = early_serial_setup(&serial[0]);
|
||||
memset(&serial_port, 0, sizeof(serial_port));
|
||||
serial_port.iotype = UPIO_PORT;
|
||||
serial_port.type = PORT_16550A;
|
||||
serial_port.uartclk = 115200*16;
|
||||
serial_port.fifosize = 16;
|
||||
spin_lock_init(&serial_port.lock);
|
||||
|
||||
/* serial port #1 */
|
||||
serial_port.iobase = sio_dev.sp1_base;
|
||||
serial_port.irq = SP1_IRQ;
|
||||
serial_port.line = 0;
|
||||
retval = early_serial_setup(&serial_port);
|
||||
if (retval < 0) {
|
||||
printk(KERN_WARNING PFX "Register Serial #0 failed.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
serial[1].iobase = sio_dev.sp2_base;
|
||||
serial[1].irq = SP2_IRQ;
|
||||
spin_lock_init(&serial[1].lock);
|
||||
retval = early_serial_setup(&serial[1]);
|
||||
|
||||
/* serial port #2 */
|
||||
serial_port.iobase = sio_dev.sp2_base;
|
||||
serial_port.irq = SP2_IRQ;
|
||||
serial_port.line = 1;
|
||||
retval = early_serial_setup(&serial_port);
|
||||
if (retval < 0)
|
||||
printk(KERN_WARNING PFX "Register Serial #1 failed.\n");
|
||||
#endif /* CONFIG_SERIAL_8250 */
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ lasi700_probe(struct parisc_device *dev)
|
|||
|
||||
hostdata->dev = &dev->dev;
|
||||
dma_set_mask(&dev->dev, DMA_32BIT_MASK);
|
||||
hostdata->base = ioremap(base, 0x100);
|
||||
hostdata->base = ioremap_nocache(base, 0x100);
|
||||
hostdata->differential = 0;
|
||||
|
||||
if (dev->id.sversion == LASI_700_SVERSION) {
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ zalon_probe(struct parisc_device *dev)
|
|||
struct gsc_irq gsc_irq;
|
||||
u32 zalon_vers;
|
||||
int error = -ENODEV;
|
||||
void __iomem *zalon = ioremap(dev->hpa.start, 4096);
|
||||
void __iomem *zalon = ioremap_nocache(dev->hpa.start, 4096);
|
||||
void __iomem *io_port = zalon + GSC_SCSI_ZALON_OFFSET;
|
||||
static int unit = 0;
|
||||
struct Scsi_Host *host;
|
||||
|
|
|
|||
|
|
@ -52,13 +52,14 @@ serial_init_chip(struct parisc_device *dev)
|
|||
address += 0x800;
|
||||
}
|
||||
|
||||
memset(&port, 0, sizeof(struct uart_port));
|
||||
port.mapbase = address;
|
||||
port.irq = dev->irq;
|
||||
port.iotype = UPIO_MEM;
|
||||
port.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF;
|
||||
port.uartclk = LASI_BASE_BAUD * 16;
|
||||
port.dev = &dev->dev;
|
||||
memset(&port, 0, sizeof(port));
|
||||
port.iotype = UPIO_MEM;
|
||||
port.uartclk = LASI_BASE_BAUD * 16;
|
||||
port.mapbase = address;
|
||||
port.membase = ioremap_nocache(address, 16);
|
||||
port.irq = dev->irq;
|
||||
port.flags = UPF_BOOT_AUTOCONF;
|
||||
port.dev = &dev->dev;
|
||||
|
||||
err = serial8250_register_port(&port);
|
||||
if (err < 0) {
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
#define MUX_BREAK(status) ((status & 0xF000) == 0x2000)
|
||||
|
||||
#define MUX_NR 256
|
||||
static unsigned int port_cnt = 0;
|
||||
static unsigned int port_cnt __read_mostly;
|
||||
static struct uart_port mux_ports[MUX_NR];
|
||||
|
||||
static struct uart_driver mux_driver = {
|
||||
|
|
@ -461,7 +461,7 @@ static int __init mux_probe(struct parisc_device *dev)
|
|||
port->iobase = 0;
|
||||
port->mapbase = dev->hpa.start + MUX_OFFSET +
|
||||
(i * MUX_LINE_OFFSET);
|
||||
port->membase = ioremap(port->mapbase, MUX_LINE_OFFSET);
|
||||
port->membase = ioremap_nocache(port->mapbase, MUX_LINE_OFFSET);
|
||||
port->iotype = UPIO_MEM;
|
||||
port->type = PORT_MUX;
|
||||
port->irq = NO_IRQ;
|
||||
|
|
|
|||
|
|
@ -373,7 +373,7 @@ sti_dump_globcfg(struct sti_glob_cfg *glob_cfg, unsigned int sti_mem_request)
|
|||
glob_cfg->save_addr));
|
||||
|
||||
/* dump extended cfg */
|
||||
cfg = PTR_STI(glob_cfg->ext_ptr);
|
||||
cfg = PTR_STI((unsigned long)glob_cfg->ext_ptr);
|
||||
DPRINTK(( KERN_INFO
|
||||
"monitor %d\n"
|
||||
"in friendly mode: %d\n"
|
||||
|
|
@ -453,25 +453,11 @@ sti_init_glob_cfg(struct sti_struct *sti,
|
|||
sti->regions_phys[i] =
|
||||
REGION_OFFSET_TO_PHYS(sti->regions[i], newhpa);
|
||||
|
||||
/* remap virtually */
|
||||
/* FIXME: add BTLB support if btlb==1 */
|
||||
len = sti->regions[i].region_desc.length * 4096;
|
||||
|
||||
/* XXX: Enabling IOREMAP debugging causes a crash, so we must be passing
|
||||
* a virtual address to something expecting a physical address that doesn't
|
||||
* go through a readX macro */
|
||||
#if 0
|
||||
if (len)
|
||||
glob_cfg->region_ptrs[i] = (unsigned long) (
|
||||
sti->regions[i].region_desc.cache ?
|
||||
ioremap(sti->regions_phys[i], len) :
|
||||
ioremap_nocache(sti->regions_phys[i], len) );
|
||||
#else
|
||||
if (len)
|
||||
glob_cfg->region_ptrs[i] = sti->regions_phys[i];
|
||||
#endif
|
||||
|
||||
DPRINTK(("region #%d: phys %08lx, virt %08x, len=%lukB, "
|
||||
DPRINTK(("region #%d: phys %08lx, region_ptr %08x, len=%lukB, "
|
||||
"btlb=%d, sysonly=%d, cache=%d, last=%d\n",
|
||||
i, sti->regions_phys[i], glob_cfg->region_ptrs[i],
|
||||
len/1024,
|
||||
|
|
|
|||
|
|
@ -34,36 +34,20 @@
|
|||
* for them to fix it and steal their solution. prumpf
|
||||
*/
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#define STI_WAIT 1
|
||||
|
||||
#include <asm/io.h> /* for USE_HPPA_IOREMAP */
|
||||
|
||||
#if USE_HPPA_IOREMAP
|
||||
|
||||
#define STI_PTR(p) (p)
|
||||
#define PTR_STI(p) (p)
|
||||
static inline int STI_CALL( unsigned long func,
|
||||
void *flags, void *inptr, void *outptr, void *glob_cfg )
|
||||
{
|
||||
int (*f)(void *,void *,void *,void *);
|
||||
f = (void*)func;
|
||||
return f(flags, inptr, outptr, glob_cfg);
|
||||
}
|
||||
|
||||
#else /* !USE_HPPA_IOREMAP */
|
||||
|
||||
#define STI_PTR(p) ( virt_to_phys(p) )
|
||||
#define PTR_STI(p) ( phys_to_virt((long)p) )
|
||||
#define STI_CALL(func, flags, inptr, outptr, glob_cfg) \
|
||||
({ \
|
||||
pdc_sti_call( func, (unsigned long)STI_PTR(flags), \
|
||||
(unsigned long)STI_PTR(inptr), \
|
||||
(unsigned long)STI_PTR(outptr), \
|
||||
(unsigned long)STI_PTR(glob_cfg)); \
|
||||
#define PTR_STI(p) ( phys_to_virt((unsigned long)p) )
|
||||
#define STI_CALL(func, flags, inptr, outptr, glob_cfg) \
|
||||
({ \
|
||||
pdc_sti_call( func, STI_PTR(flags), \
|
||||
STI_PTR(inptr), \
|
||||
STI_PTR(outptr), \
|
||||
STI_PTR(glob_cfg)); \
|
||||
})
|
||||
|
||||
#endif /* USE_HPPA_IOREMAP */
|
||||
|
||||
|
||||
#define sti_onscreen_x(sti) (sti->glob_cfg->onscreen_x)
|
||||
#define sti_onscreen_y(sti) (sti->glob_cfg->onscreen_y)
|
||||
|
|
@ -352,8 +336,9 @@ struct sti_struct {
|
|||
struct sti_conf_outptr outptr; /* configuration */
|
||||
struct sti_conf_outptr_ext outptr_ext;
|
||||
|
||||
/* PCI data structures (pg. 17ff from sti.pdf) */
|
||||
struct pci_dev *pd;
|
||||
|
||||
/* PCI data structures (pg. 17ff from sti.pdf) */
|
||||
u8 rm_entry[16]; /* pci region mapper array == pci config space offset */
|
||||
|
||||
/* pointer to the fb_info where this STI device is used */
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
* Low level Frame buffer driver for HP workstations with
|
||||
* STI (standard text interface) video firmware.
|
||||
*
|
||||
* Copyright (C) 2001-2005 Helge Deller <deller@gmx.de>
|
||||
* Copyright (C) 2001-2006 Helge Deller <deller@gmx.de>
|
||||
* Portions Copyright (C) 2001 Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
*
|
||||
* Based on:
|
||||
|
|
@ -514,7 +514,7 @@ rattlerSetupPlanes(struct stifb_info *fb)
|
|||
SETUP_HW(fb);
|
||||
WRITE_BYTE(1, fb, REG_16b1);
|
||||
|
||||
fb_memset(fb->info.fix.smem_start, 0xff,
|
||||
fb_memset((void*)fb->info.fix.smem_start, 0xff,
|
||||
fb->info.var.yres*fb->info.fix.line_length);
|
||||
|
||||
CRX24_SET_OVLY_MASK(fb);
|
||||
|
|
@ -908,83 +908,6 @@ SETUP_HCRX(struct stifb_info *fb)
|
|||
|
||||
/* ------------------- driver specific functions --------------------------- */
|
||||
|
||||
#define TMPBUFLEN 2048
|
||||
|
||||
static ssize_t
|
||||
stifb_read(struct file *file, char *buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
unsigned long p = *ppos;
|
||||
struct inode *inode = file->f_dentry->d_inode;
|
||||
int fbidx = iminor(inode);
|
||||
struct fb_info *info = registered_fb[fbidx];
|
||||
char tmpbuf[TMPBUFLEN];
|
||||
|
||||
if (!info || ! info->screen_base)
|
||||
return -ENODEV;
|
||||
|
||||
if (p >= info->fix.smem_len)
|
||||
return 0;
|
||||
if (count >= info->fix.smem_len)
|
||||
count = info->fix.smem_len;
|
||||
if (count + p > info->fix.smem_len)
|
||||
count = info->fix.smem_len - p;
|
||||
if (count > sizeof(tmpbuf))
|
||||
count = sizeof(tmpbuf);
|
||||
if (count) {
|
||||
char *base_addr;
|
||||
|
||||
base_addr = info->screen_base;
|
||||
memcpy_fromio(&tmpbuf, base_addr+p, count);
|
||||
count -= copy_to_user(buf, &tmpbuf, count);
|
||||
if (!count)
|
||||
return -EFAULT;
|
||||
*ppos += count;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
stifb_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
struct inode *inode = file->f_dentry->d_inode;
|
||||
int fbidx = iminor(inode);
|
||||
struct fb_info *info = registered_fb[fbidx];
|
||||
unsigned long p = *ppos;
|
||||
size_t c;
|
||||
int err;
|
||||
char tmpbuf[TMPBUFLEN];
|
||||
|
||||
if (!info || !info->screen_base)
|
||||
return -ENODEV;
|
||||
|
||||
if (p > info->fix.smem_len)
|
||||
return -ENOSPC;
|
||||
if (count >= info->fix.smem_len)
|
||||
count = info->fix.smem_len;
|
||||
err = 0;
|
||||
if (count + p > info->fix.smem_len) {
|
||||
count = info->fix.smem_len - p;
|
||||
err = -ENOSPC;
|
||||
}
|
||||
|
||||
p += (unsigned long)info->screen_base;
|
||||
c = count;
|
||||
while (c) {
|
||||
int len = c > sizeof(tmpbuf) ? sizeof(tmpbuf) : c;
|
||||
err = -EFAULT;
|
||||
if (copy_from_user(&tmpbuf, buf, len))
|
||||
break;
|
||||
memcpy_toio(p, &tmpbuf, len);
|
||||
c -= len;
|
||||
p += len;
|
||||
buf += len;
|
||||
*ppos += len;
|
||||
}
|
||||
if (count-c)
|
||||
return (count-c);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
stifb_setcolreg(u_int regno, u_int red, u_int green,
|
||||
u_int blue, u_int transp, struct fb_info *info)
|
||||
|
|
@ -1137,8 +1060,6 @@ stifb_init_display(struct stifb_info *fb)
|
|||
|
||||
static struct fb_ops stifb_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.fb_read = stifb_read,
|
||||
.fb_write = stifb_write,
|
||||
.fb_setcolreg = stifb_setcolreg,
|
||||
.fb_blank = stifb_blank,
|
||||
.fb_fillrect = cfb_fillrect,
|
||||
|
|
@ -1162,7 +1083,7 @@ stifb_init_fb(struct sti_struct *sti, int bpp_pref)
|
|||
char *dev_name;
|
||||
int bpp, xres, yres;
|
||||
|
||||
fb = kmalloc(sizeof(*fb), GFP_ATOMIC);
|
||||
fb = kzalloc(sizeof(*fb), GFP_ATOMIC);
|
||||
if (!fb) {
|
||||
printk(KERN_ERR "stifb: Could not allocate stifb structure\n");
|
||||
return -ENODEV;
|
||||
|
|
@ -1171,7 +1092,6 @@ stifb_init_fb(struct sti_struct *sti, int bpp_pref)
|
|||
info = &fb->info;
|
||||
|
||||
/* set struct to a known state */
|
||||
memset(fb, 0, sizeof(*fb));
|
||||
fix = &info->fix;
|
||||
var = &info->var;
|
||||
|
||||
|
|
@ -1234,7 +1154,7 @@ stifb_init_fb(struct sti_struct *sti, int bpp_pref)
|
|||
case S9000_ID_TOMCAT: /* Dual CRX, behaves else like a CRX */
|
||||
/* FIXME: TomCat supports two heads:
|
||||
* fb.iobase = REGION_BASE(fb_info,3);
|
||||
* fb.screen_base = (void*) REGION_BASE(fb_info,2);
|
||||
* fb.screen_base = ioremap_nocache(REGION_BASE(fb_info,2),xxx);
|
||||
* for now we only support the left one ! */
|
||||
xres = fb->ngle_rom.x_size_visible;
|
||||
yres = fb->ngle_rom.y_size_visible;
|
||||
|
|
@ -1327,7 +1247,8 @@ stifb_init_fb(struct sti_struct *sti, int bpp_pref)
|
|||
|
||||
strcpy(fix->id, "stifb");
|
||||
info->fbops = &stifb_ops;
|
||||
info->screen_base = (void*) REGION_BASE(fb,1);
|
||||
info->screen_base = ioremap_nocache(REGION_BASE(fb,1), fix->smem_len);
|
||||
info->screen_size = fix->smem_len;
|
||||
info->flags = FBINFO_DEFAULT;
|
||||
info->pseudo_palette = &fb->pseudo_palette;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue