diff -Nur linux-2.4.23-pre3/drivers/net/irda/nsc-ircc.c linux-nsc-ircc-2.4.23-pre3/drivers/net/irda/nsc-ircc.c --- linux-2.4.23-pre3/drivers/net/irda/nsc-ircc.c 2002-11-29 00:53:13.000000000 +0100 +++ linux-nsc-ircc-2.4.23-pre3/drivers/net/irda/nsc-ircc.c 2003-09-05 11:19:34.000000000 +0200 @@ -6,8 +6,8 @@ * Status: Stable. * Author: Dag Brattli * Created at: Sat Nov 7 21:43:15 1998 - * Modified at: Wed Mar 1 11:29:34 2000 - * Modified by: Dag Brattli + * Modified at: Thu Sep 4 01:00:33 2003 + * Modified by: Maik Broemme * * Copyright (c) 1998-2000 Dag Brattli * Copyright (c) 1998 Lichen Wang, @@ -361,15 +361,23 @@ } MESSAGE("IrDA: Registered device %s\n", dev->name); - /* Check if user has supplied the dongle id or not */ + /* Check if user has supplied the dongle id and if it is in the range of available ids or not. */ if (!dongle_id) { dongle_id = nsc_ircc_read_dongle_id(self->io.fir_base); MESSAGE("%s, Found dongle: %s\n", driver_name, dongle_types[dongle_id]); } else { - MESSAGE("%s, Using dongle: %s\n", driver_name, - dongle_types[dongle_id]); + if (dongle_id < sizeof(dongle_types) / sizeof(dongle_types[0])) { + MESSAGE("%s, Using dongle: %s\n", driver_name, + dongle_types[dongle_id]); + } else { + MESSAGE("%s, dongle id %i out of range, start autodetect.\n", driver_name, dongle_id); + dongle_id = nsc_ircc_read_dongle_id(self->io.fir_base); + + MESSAGE("%s, Found dongle: %s\n", driver_name, + dongle_types[dongle_id]); + } } self->io.dongle_id = dongle_id;