For some architectures (e.g. arc), BASE_BAUD cannot be constant number. So have to delay initializing 'old_serial_port.baud_base', or can not pass compiling. The related error (allmodconfig for arc with gcc-4.8.0): CC [M] drivers/staging/speakup/serialio.o drivers/staging/speakup/serialio.c:12:2: error: initializer element is not constant SERIAL_PORT_DFNS ^ drivers/staging/speakup/serialio.c:12:2: error: (near initialization for 'rs_table[0].baud_base') drivers/staging/speakup/serialio.c:12:2: error: initializer element is not constant drivers/staging/speakup/serialio.c:12:2: error: (near initialization for 'rs_table[1].baud_base') drivers/staging/speakup/serialio.c:12:2: error: initializer element is not constant drivers/staging/speakup/serialio.c:12:2: error: (near initialization for 'rs_table[2].baud_base') drivers/staging/speakup/serialio.c:12:2: error: initializer element is not constant drivers/staging/speakup/serialio.c:12:2: error: (near initialization for 'rs_table[3].baud_base') Signed-off-by: Chen Gang <gang.chen@xxxxxxxxxxx> --- drivers/staging/speakup/serialio.c | 7 +++++-- drivers/staging/speakup/serialio.h | 10 +++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/staging/speakup/serialio.c b/drivers/staging/speakup/serialio.c index 1354288..c337fea 100644 --- a/drivers/staging/speakup/serialio.c +++ b/drivers/staging/speakup/serialio.c @@ -8,7 +8,7 @@ static void start_serial_interrupt(int irq); -static const struct old_serial_port rs_table[] = { +static struct old_serial_port rs_table[] = { SERIAL_PORT_DFNS }; static const struct old_serial_port *serstate; @@ -19,9 +19,12 @@ const struct old_serial_port *spk_serial_init(int index) int baud = 9600, quot = 0; unsigned int cval = 0; int cflag = CREAD | HUPCL | CLOCAL | B9600 | CS8; - const struct old_serial_port *ser = rs_table + index; + struct old_serial_port *ser = rs_table + index; int err; + /* Initialize baud_base firstly, BASE_BAUD may not be constant */ + ser->baud_base = BASE_BAUD; + /* Divisor, bytesize and parity */ quot = ser->baud_base / baud; cval = cflag & (CSIZE | CSTOPB); diff --git a/drivers/staging/speakup/serialio.h b/drivers/staging/speakup/serialio.h index 55d68b5..e1e9152 100644 --- a/drivers/staging/speakup/serialio.h +++ b/drivers/staging/speakup/serialio.h @@ -52,11 +52,11 @@ struct old_serial_port { #endif #ifndef SERIAL_PORT_DFNS #define SERIAL_PORT_DFNS \ - /* UART CLK PORT IRQ FLAGS */ \ - { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \ - { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \ - { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ - { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ + /* UART CLK PORT IRQ FLAGS */ \ + { 0, 0 /* delay init */, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \ + { 0, 0 /* delay init */, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \ + { 0, 0 /* delay init */, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ + { 0, 0 /* delay init */, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ #endif #ifndef IRQF_SHARED #define IRQF_SHARED SA_SHIRQ -- 1.7.7.6 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel