Merge git://git.infradead.org/embedded-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 25 Jul 2008 19:02:08 +0000 (12:02 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 25 Jul 2008 19:02:08 +0000 (12:02 -0700)
* git://git.infradead.org/embedded-2.6:
  Make console charset translation optional

1  2 
drivers/char/Kconfig
drivers/char/Makefile
drivers/char/vt.c

diff --combined drivers/char/Kconfig
index 6c070dc5f2d46c0f9890ebe951038faf5ac1a1c9,b7f7371dee73c094678fe8ba885ed9ab9be9677b..d0ac944e16961775d5bb428e851ab0ea0e4d7494
@@@ -36,6 -36,14 +36,14 @@@ config V
          If unsure, say Y, or else you won't be able to do much with your new
          shiny Linux system :-)
  
+ config CONSOLE_TRANSLATIONS
+       depends on VT
+       default y
+       bool "Enable character translations in console" if EMBEDDED
+       ---help---
+         This enables support for font mapping and Unicode translation
+         on virtual consoles.
  config VT_CONSOLE
        bool "Support for console on virtual terminal" if EMBEDDED
        depends on VT
@@@ -118,8 -126,8 +126,8 @@@ config COMPUTON
          order to become a dial-in server. If you have a card like that, say
          Y here and read <file:Documentation/computone.txt>.
  
 -        To compile this driver as modules, choose M here: the
 -        modules will be called ip2 and ip2main.
 +        To compile this driver as module, choose M here: the
 +        module will be called ip2.
  
  config ROCKETPORT
        tristate "Comtrol RocketPort support"
@@@ -300,6 -308,16 +308,6 @@@ config SPECIALI
          and compile this driver as kernel loadable module which will be
          called specialix.
  
 -config SPECIALIX_RTSCTS
 -      bool "Specialix DTR/RTS pin is RTS"
 -      depends on SPECIALIX
 -      help
 -        The Specialix IO8+ card can only support either RTS or DTR. If you
 -        say N here, the driver will use the pin as "DTR" when the tty is in
 -        software handshake mode.  If you say Y here or hardware handshake is
 -        on, it will always be RTS.  Read the file
 -        <file:Documentation/specialix.txt> for more information.
 -
  config SX
        tristate "Specialix SX (and SI) card support"
        depends on SERIAL_NONSTANDARD && (PCI || EISA || ISA)
@@@ -578,14 -596,11 +586,14 @@@ config HVC_DRIVE
          It will automatically be selected if one of the back-end console drivers
          is selected.
  
 +config HVC_IRQ
 +      bool
  
  config HVC_CONSOLE
        bool "pSeries Hypervisor Virtual Console support"
        depends on PPC_PSERIES
        select HVC_DRIVER
 +      select HVC_IRQ
        help
          pSeries machines when partitioned support a hypervisor virtual
          console. This driver allows each pSeries partition to have a console
@@@ -596,7 -611,6 +604,7 @@@ config HVC_ISERIE
        depends on PPC_ISERIES
        default y
        select HVC_DRIVER
 +      select HVC_IRQ
        help
          iSeries machines support a hypervisor virtual console.
  
@@@ -618,18 -632,13 +626,18 @@@ config HVC_XE
        bool "Xen Hypervisor Console support"
        depends on XEN
        select HVC_DRIVER
 +      select HVC_IRQ
        default y
        help
          Xen virtual console device driver
  
  config VIRTIO_CONSOLE
 -      bool
 +      tristate "Virtio console"
 +      depends on VIRTIO
        select HVC_DRIVER
 +      help
 +        Virtio console for use with lguest and other hypervisors.
 +
  
  config HVCS
        tristate "IBM Hypervisor Virtual Console Server support"
          which will also be compiled when this driver is built as a
          module.
  
 +config IBM_BSR
 +      tristate "IBM POWER Barrier Synchronization Register support"
 +      depends on PPC_PSERIES
 +      help
 +        This devices exposes a hardware mechanism for fast synchronization
 +        of threads across a large system which avoids bouncing a cacheline
 +        between several cores on a system
 +
  source "drivers/char/ipmi/Kconfig"
  
  config DS1620
@@@ -756,7 -757,7 +764,7 @@@ config NVRA
  if RTC_LIB=n
  
  config RTC
 -      tristate "Enhanced Real Time Clock Support"
 +      tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"
        depends on !PPC && !PARISC && !IA64 && !M68K && !SPARC && !FRV \
                        && !ARM && !SUPERH && !S390 && !AVR32
        ---help---
@@@ -866,6 -867,13 +874,6 @@@ config DS130
  
  endif # RTC_LIB
  
 -config COBALT_LCD
 -      bool "Support for Cobalt LCD"
 -      depends on MIPS_COBALT
 -      help
 -        This option enables support for the LCD display and buttons found
 -        on Cobalt systems through a misc device.
 -
  config DTLK
        tristate "Double Talk PC internal speech card support"
        depends on ISA
@@@ -1036,9 -1044,9 +1044,9 @@@ config HPE
          non-periodic and/or periodic.
  
  config HPET_RTC_IRQ
 -      bool "HPET Control RTC IRQ" if !HPET_EMULATE_RTC
 -      default n
 -      depends on HPET
 +      bool
 +      default HPET_EMULATE_RTC
 +      depends on RTC && HPET
        help
          If you say Y here, you will disable RTC_IRQ in drivers/char/rtc.c. It
          is assumed the platform called hpet_alloc with the RTC IRQ values for
diff --combined drivers/char/Makefile
index f7a0d1a754fc1efe15d916f155cab9a9a6b62a57,6ef173cab144820d9f1f4c5b5a9117cadf8dd3c7..8a161c30e1dc1670ebd5576ccc7669fdc857aaf7
@@@ -7,13 -7,13 +7,13 @@@
  #
  FONTMAPFILE = cp437.uni
  
 -obj-y  += mem.o random.o tty_io.o n_tty.o tty_ioctl.o
 +obj-y  += mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o 
  
  obj-$(CONFIG_LEGACY_PTYS)     += pty.o
  obj-$(CONFIG_UNIX98_PTYS)     += pty.o
  obj-y                         += misc.o
- obj-$(CONFIG_VT)              += vt_ioctl.o vc_screen.o consolemap.o \
                                 consolemap_deftbl.o selection.o keyboard.o
+ obj-$(CONFIG_VT)              += vt_ioctl.o vc_screen.o selection.o keyboard.o
obj-$(CONFIG_CONSOLE_TRANSLATIONS) += consolemap.o consolemap_deftbl.o
  obj-$(CONFIG_HW_CONSOLE)      += vt.o defkeymap.o
  obj-$(CONFIG_AUDIT)           += tty_audit.o
  obj-$(CONFIG_MAGIC_SYSRQ)     += sysrq.o
@@@ -48,7 -48,6 +48,7 @@@ obj-$(CONFIG_HVC_ISERIES)     += hvc_iserie
  obj-$(CONFIG_HVC_RTAS)                += hvc_rtas.o
  obj-$(CONFIG_HVC_BEAT)                += hvc_beat.o
  obj-$(CONFIG_HVC_DRIVER)      += hvc_console.o
 +obj-$(CONFIG_HVC_IRQ)         += hvc_irq.o
  obj-$(CONFIG_HVC_XEN)         += hvc_xen.o
  obj-$(CONFIG_VIRTIO_CONSOLE)  += virtio_console.o
  obj-$(CONFIG_RAW_DRIVER)      += raw.o
@@@ -58,12 -57,12 +58,12 @@@ obj-$(CONFIG_MMTIMER)              += mmtimer.
  obj-$(CONFIG_VIOCONS)         += viocons.o
  obj-$(CONFIG_VIOTAPE)         += viotape.o
  obj-$(CONFIG_HVCS)            += hvcs.o
 +obj-$(CONFIG_IBM_BSR)         += bsr.o
  obj-$(CONFIG_SGI_MBCS)                += mbcs.o
  obj-$(CONFIG_BRIQ_PANEL)      += briq_panel.o
  obj-$(CONFIG_BFIN_OTP)                += bfin-otp.o
  
  obj-$(CONFIG_PRINTER)         += lp.o
 -obj-$(CONFIG_TIPAR)           += tipar.o
  
  obj-$(CONFIG_APM_EMULATION)   += apm-emulation.o
  
@@@ -88,6 -87,7 +88,6 @@@ obj-$(CONFIG_TOSHIBA)         += toshiba.
  obj-$(CONFIG_I8K)             += i8k.o
  obj-$(CONFIG_DS1620)          += ds1620.o
  obj-$(CONFIG_HW_RANDOM)               += hw_random/
 -obj-$(CONFIG_COBALT_LCD)      += lcd.o
  obj-$(CONFIG_PPDEV)           += ppdev.o
  obj-$(CONFIG_NWBUTTON)                += nwbutton.o
  obj-$(CONFIG_NWFLASH)         += nwflash.o
@@@ -101,6 -101,7 +101,6 @@@ obj-$(CONFIG_TELCLOCK)             += tlclk.
  
  obj-$(CONFIG_MWAVE)           += mwave/
  obj-$(CONFIG_AGP)             += agp/
 -obj-$(CONFIG_DRM)             += drm/
  obj-$(CONFIG_PCMCIA)          += pcmcia/
  obj-$(CONFIG_IPMI_HANDLER)    += ipmi/
  
diff --combined drivers/char/vt.c
index cb8c90da3934fa60bb08b47460271a2135878b68,18b7fb06dace156a2173d03390e9e6681723cdb2..82a51f38a5469cd1a56637c6635b9c16f69f5f89
@@@ -261,7 -261,7 +261,7 @@@ static void notify_update(struct vc_dat
  #ifdef VT_BUF_VRAM_ONLY
  #define DO_UPDATE(vc) 0
  #else
 -#define DO_UPDATE(vc) CON_IS_VISIBLE(vc)
 +#define DO_UPDATE(vc) (CON_IS_VISIBLE(vc) && !console_blanked)
  #endif
  
  static inline unsigned short *screenpos(struct vc_data *vc, int offset, int viewed)
@@@ -434,7 -434,7 +434,7 @@@ static void update_attr(struct vc_data 
                      vc->vc_blink, vc->vc_underline,
                      vc->vc_reverse ^ vc->vc_decscnm, vc->vc_italic);
        vc->vc_video_erase_char = (build_attr(vc, vc->vc_color, 1, vc->vc_blink, 0, vc->vc_decscnm, 0) << 8) | ' ';
 -      vc->vc_scrl_erase_char = (build_attr(vc, vc->vc_def_color, 1, false, false, false, false) << 8) | ' ';
 +      vc->vc_scrl_erase_char = (build_attr(vc, vc->vc_def_color, 1, false, false, vc->vc_decscnm, false) << 8) | ' ';
  }
  
  /* Note: inverting the screen twice should revert to the original state */
@@@ -909,7 -909,7 +909,7 @@@ int vc_resize(struct vc_data *vc, unsig
  
        if (vc->vc_tty) {
                struct winsize ws, *cws = &vc->vc_tty->winsize;
 -              unsigned long flags;
 +              struct pid *pgrp = NULL;
  
                memset(&ws, 0, sizeof(ws));
                ws.ws_row = vc->vc_rows;
                ws.ws_ypixel = vc->vc_scan_lines;
  
                mutex_lock(&vc->vc_tty->termios_mutex);
 -              spin_lock_irqsave(&vc->vc_tty->ctrl_lock, flags);
 -              if ((ws.ws_row != cws->ws_row || ws.ws_col != cws->ws_col) &&
 -                  vc->vc_tty->pgrp)
 +              spin_lock_irq(&vc->vc_tty->ctrl_lock);
 +              if ((ws.ws_row != cws->ws_row || ws.ws_col != cws->ws_col))
 +                      pgrp = get_pid(vc->vc_tty->pgrp);
 +              spin_unlock_irq(&vc->vc_tty->ctrl_lock);
 +              if (pgrp) {
                        kill_pgrp(vc->vc_tty->pgrp, SIGWINCH, 1);
 -              spin_unlock_irqrestore(&vc->vc_tty->ctrl_lock, flags);
 +                      put_pid(pgrp);
 +              }
                *cws = ws;
                mutex_unlock(&vc->vc_tty->termios_mutex);
        }
@@@ -2211,7 -2208,7 +2211,7 @@@ rescan_last_byte
                        c = 0xfffd;
                    tc = c;
                } else {        /* no utf or alternate charset mode */
-                   tc = vc->vc_translate[vc->vc_toggle_meta ? (c | 0x80) : c];
+                   tc = vc_translate(vc, c);
                }
  
                param.c = tc;
@@@ -2749,8 -2746,8 +2749,8 @@@ static int con_open(struct tty_struct *
                                tty->termios->c_iflag |= IUTF8;
                        else
                                tty->termios->c_iflag &= ~IUTF8;
 -                      release_console_sem();
                        vcs_make_sysfs(tty);
 +                      release_console_sem();
                        return ret;
                }
        }
@@@ -2775,8 -2772,8 +2775,8 @@@ static void con_close(struct tty_struc
                if (vc)
                        vc->vc_tty = NULL;
                tty->driver_data = NULL;
 -              release_console_sem();
                vcs_remove_sysfs(tty);
 +              release_console_sem();
                mutex_unlock(&tty_mutex);
                /*
                 * tty_mutex is released, but we still hold BKL, so there is
@@@ -3425,10 -3422,9 +3425,10 @@@ int register_con_driver(const struct co
        if (retval)
                goto err;
  
 -      con_driver->dev = device_create(vtconsole_class, NULL,
 -                                      MKDEV(0, con_driver->node),
 -                                      "vtcon%i", con_driver->node);
 +      con_driver->dev = device_create_drvdata(vtconsole_class, NULL,
 +                                              MKDEV(0, con_driver->node),
 +                                              NULL, "vtcon%i",
 +                                              con_driver->node);
  
        if (IS_ERR(con_driver->dev)) {
                printk(KERN_WARNING "Unable to create device for %s; "
@@@ -3536,10 -3532,9 +3536,10 @@@ static int __init vtconsole_class_init(
                struct con_driver *con = &registered_con_driver[i];
  
                if (con->con && !con->dev) {
 -                      con->dev = device_create(vtconsole_class, NULL,
 -                                               MKDEV(0, con->node),
 -                                               "vtcon%i", con->node);
 +                      con->dev = device_create_drvdata(vtconsole_class, NULL,
 +                                                       MKDEV(0, con->node),
 +                                                       NULL, "vtcon%i",
 +                                                       con->node);
  
                        if (IS_ERR(con->dev)) {
                                printk(KERN_WARNING "Unable to create "