The following is a list of files and features that are going to be
removed in the kernel source tree.  Every entry should contain what
exactly is going away, why it is happening, and who is going to be doing
the work.  When the feature is removed from the kernel, it should also
be removed from this file.

---------------------------

What:	V4L2 VIDIOC_G_MPEGCOMP and VIDIOC_S_MPEGCOMP
When:	October 2007
Why:	Broken attempt to set MPEG compression parameters. These ioctls are
	not able to implement the wide variety of parameters that can be set
	by hardware MPEG encoders. A new MPEG control mechanism was created
	in kernel 2.6.18 that replaces these ioctls. See the V4L2 specification
	(section 1.9: Extended controls) for more information on this topic.
Who:	Hans Verkuil <hverkuil@xs4all.nl> and
	Mauro Carvalho Chehab <mchehab@infradead.org>

---------------------------

What:	/sys/devices/.../power/state
	dev->power.power_state
	dpm_runtime_{suspend,resume)()
When:	July 2007
Why:	Broken design for runtime control over driver power states, confusing
	driver-internal runtime power management with:  mechanisms to support
	system-wide sleep state transitions; event codes that distinguish
	different phases of swsusp "sleep" transitions; and userspace policy
	inputs.  This framework was never widely used, and most attempts to
	use it were broken.  Drivers should instead be exposing domain-specific
	interfaces either to kernel or to userspace.
Who:	Pavel Machek <pavel@suse.cz>

---------------------------

What:	RAW driver (CONFIG_RAW_DRIVER)
When:	December 2005
Why:	declared obsolete since kernel 2.6.3
	O_DIRECT can be used instead
Who:	Adrian Bunk <bunk@stusta.de>

---------------------------

What:	raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN
When:	June 2007
Why:	Deprecated in favour of the more efficient and robust rawiso interface.
	Affected are applications which use the deprecated part of libraw1394
	(raw1394_iso_write, raw1394_start_iso_write, raw1394_start_iso_rcv,
	raw1394_stop_iso_rcv) or bypass	libraw1394.
Who:	Dan Dennedy <dan@dennedy.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>

---------------------------

What:	Video4Linux API 1 ioctls and video_decoder.h from Video devices.
When:	December 2006
Why:	V4L1 AP1 was replaced by V4L2 API. during migration from 2.4 to 2.6
	series. The old API have lots of drawbacks and don't provide enough
	means to work with all video and audio standards. The newer API is
	already available on the main drivers and should be used instead.
	Newer drivers should use v4l_compat_translate_ioctl function to handle
	old calls, replacing to newer ones.
	Decoder iocts are using internally to allow video drivers to
	communicate with video decoders. This should also be improved to allow
	V4L2 calls being translated into compatible internal ioctls.
Who:	Mauro Carvalho Chehab <mchehab@brturbo.com.br>

---------------------------

What:	PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
When:	November 2005
Files:	drivers/pcmcia/: pcmcia_ioctl.c
Why:	With the 16-bit PCMCIA subsystem now behaving (almost) like a
	normal hotpluggable bus, and with it using the default kernel
	infrastructure (hotplug, driver core, sysfs) keeping the PCMCIA
	control ioctl needed by cardmgr and cardctl from pcmcia-cs is
	unnecessary, and makes further cleanups and integration of the
	PCMCIA subsystem into the Linux kernel device driver model more
	difficult. The features provided by cardmgr and cardctl are either
	handled by the kernel itself now or are available in the new
	pcmciautils package available at
	http://kernel.org/pub/linux/utils/kernel/pcmcia/
Who:	Dominik Brodowski <linux@brodo.de>

---------------------------

What:	remove EXPORT_SYMBOL(kernel_thread)
When:	August 2006
Files:	arch/*/kernel/*_ksyms.c
Why:	kernel_thread is a low-level implementation detail.  Drivers should
        use the <linux/kthread.h> API instead which shields them from
	implementation details and provides a higherlevel interface that
	prevents bugs and code duplication
Who:	Christoph Hellwig <hch@lst.de>

---------------------------

What:	CONFIG_FORCED_INLINING
When:	June 2006
Why:	Config option is there to see if gcc is good enough. (in january
        2006). If it is, the behavior should just be the default. If it's not,
	the option should just go away entirely.
Who:    Arjan van de Ven

---------------------------

What:   eepro100 network driver
When:   January 2007
Why:    replaced by the e100 driver
Who:    Adrian Bunk <bunk@stusta.de>

---------------------------

What:  drivers depending on OSS_OBSOLETE_DRIVER
When:  options in 2.6.20, code in 2.6.22
Why:   OSS drivers with ALSA replacements
Who:   Adrian Bunk <bunk@stusta.de>

---------------------------

What:	Usage of invalid timevals in setitimer
When:	March 2007
Why:	POSIX requires to validate timevals in the setitimer call. This
	was never done by Linux. The invalid (e.g. negative timevals) were
	silently converted to more or less random timeouts and intervals.
	Until the removal a per boot limited number of warnings is printed
	and the timevals are sanitized.

Who:	Thomas Gleixner <tglx@linutronix.de>

---------------------------

What:	Unused EXPORT_SYMBOL/EXPORT_SYMBOL_GPL exports
	(temporary transition config option provided until then)
	The transition config option will also be removed at the same time.
When:	before 2.6.19
Why:	Unused symbols are both increasing the size of the kernel binary
	and are often a sign of "wrong API"
Who:	Arjan van de Ven <arjan@linux.intel.com>

---------------------------

What:	USB driver API moves to EXPORT_SYMBOL_GPL
When:	February 2008
Files:	include/linux/usb.h, drivers/usb/core/driver.c
Why:	The USB subsystem has changed a lot over time, and it has been
	possible to create userspace USB drivers using usbfs/libusb/gadgetfs
	that operate as fast as the USB bus allows.  Because of this, the USB
	subsystem will not be allowing closed source kernel drivers to
	register with it, after this grace period is over.  If anyone needs
	any help in converting their closed source drivers over to use the
	userspace filesystems, please contact the
	linux-usb-devel@lists.sourceforge.net mailing list, and the developers
	there will be glad to help you out.
Who:	Greg Kroah-Hartman <gregkh@suse.de>

---------------------------

What:	Interrupt only SA_* flags
When:	Januar 2007
Why:	The interrupt related SA_* flags are replaced by IRQF_* to move them
	out of the signal namespace.

Who:	Thomas Gleixner <tglx@linutronix.de>

---------------------------

What:	PHYSDEVPATH, PHYSDEVBUS, PHYSDEVDRIVER in the uevent environment
When:	October 2008
Why:	The stacking of class devices makes these values misleading and
	inconsistent.
	Class devices should not carry any of these properties, and bus
	devices have SUBSYTEM and DRIVER as a replacement.
Who:	Kay Sievers <kay.sievers@suse.de>

---------------------------

What:	i2c-isa
When:	December 2006
Why:	i2c-isa is a non-sense and doesn't fit in the device driver
	model. Drivers relying on it are better implemented as platform
	drivers.
Who:	Jean Delvare <khali@linux-fr.org>

---------------------------

What:	i2c_adapter.list
When:	July 2007
Why:	Superfluous, this list duplicates the one maintained by the driver
	core.
Who:	Jean Delvare <khali@linux-fr.org>,
	David Brownell <dbrownell@users.sourceforge.net>

---------------------------

What:  drivers depending on OBSOLETE_OSS
When:  options in 2.6.22, code in 2.6.24
Why:   OSS drivers with ALSA replacements
Who:   Adrian Bunk <bunk@stusta.de>

---------------------------

What:	ACPI hooks (X86_SPEEDSTEP_CENTRINO_ACPI) in speedstep-centrino driver
When:	December 2006
Why:	Speedstep-centrino driver with ACPI hooks and acpi-cpufreq driver are
	functionally very much similar. They talk to ACPI in same way. Only
	difference between them is the way they do frequency transitions.
	One uses MSRs and the other one uses IO ports. Functionaliy of
	speedstep_centrino with ACPI hooks is now merged into acpi-cpufreq.
	That means one common driver will support all Intel Enhanced Speedstep
	capable CPUs. That means less confusion over name of
	speedstep-centrino driver (with that driver supposed to be used on
	non-centrino platforms). That means less duplication of code and
	less maintenance effort and no possibility of these two drivers
	going out of sync.
	Current users of speedstep_centrino with ACPI hooks are requested to
	switch over to acpi-cpufreq driver. speedstep-centrino will continue
	to work using older non-ACPI static table based scheme even after this
	date.

Who:	Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>

---------------------------

What:	/sys/firmware/acpi/namespace
When:	2.6.21
Why:	The ACPI namespace is effectively the symbol list for
	the BIOS.  The device names are completely arbitrary
	and have no place being exposed to user-space.

	For those interested in the BIOS ACPI namespace,
	the BIOS can be extracted and disassembled with acpidump
	and iasl as documented in the pmtools package here:
	http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/utils
Who:	Len Brown <len.brown@intel.com>

---------------------------

What:	ACPI procfs interface
When:	July 2007
Why:	After ACPI sysfs conversion, ACPI attributes will be duplicated
	in sysfs and the ACPI procfs interface should be removed.
Who:	Zhang Rui <rui.zhang@intel.com>

---------------------------

What:	/proc/acpi/button
When:	August 2007
Why:	/proc/acpi/button has been replaced by events to the input layer
	since 2.6.20.
Who:	Len Brown <len.brown@intel.com>

---------------------------

What:   sk98lin network driver
When:   July 2007
Why:    In kernel tree version of driver is unmaintained. Sk98lin driver
	replaced by the skge driver. 
Who:    Stephen Hemminger <shemminger@osdl.org>

---------------------------

What:	Compaq touchscreen device emulation
When:	Oct 2007
Files:	drivers/input/tsdev.c
Why:	The code says it was obsolete when it was written in 2001.
	tslib is a userspace library which does anything tsdev can do and
	much more besides in userspace where this code belongs. There is no
	longer any need for tsdev and applications should have converted to
	use tslib by now.
	The name "tsdev" is also extremely confusing and lots of people have
	it loaded when they don't need/use it.
Who:	Richard Purdie <rpurdie@rpsys.net>

---------------------------

What:	i8xx_tco watchdog driver
When:	in 2.6.22
Why:	the i8xx_tco watchdog driver has been replaced by the iTCO_wdt
	watchdog driver.
Who:	Wim Van Sebroeck <wim@iguana.be>

---------------------------

What:	Multipath cached routing support in ipv4
When:	in 2.6.23
Why:	Code was merged, then submitter immediately disappeared leaving
	us with no maintainer and lots of bugs.  The code should not have
	been merged in the first place, and many aspects of it's
	implementation are blocking more critical core networking
	development.  It's marked EXPERIMENTAL and no distribution
	enables it because it cause obscure crashes due to unfixable bugs
	(interfaces don't return errors so memory allocation can't be
	handled, calling contexts of these interfaces make handling
	errors impossible too because they get called after we've
	totally commited to creating a route object, for example).
	This problem has existed for years and no forward progress
	has ever been made, and nobody steps up to try and salvage
	this code, so we're going to finally just get rid of it.
Who:	David S. Miller <davem@davemloft.net>

---------------------------

What:	read_dev_chars(), read_conf_data{,_lpm}() (s390 common I/O layer)
When:	December 2007
Why:	These functions are a leftover from 2.4 times. They have several
	problems:
	- Duplication of checks that are done in the device driver's
	  interrupt handler
	- common I/O layer can't do device specific error recovery
	- device driver can't be notified for conditions happening during
	  execution of the function
	Device drivers should issue the read device characteristics and read
	configuration data ccws and do the appropriate error handling
	themselves.
Who:	Cornelia Huck <cornelia.huck@de.ibm.com>

---------------------------

What:	i2c-ixp2000, i2c-ixp4xx and scx200_i2c drivers
When:	September 2007
Why:	Obsolete. The new i2c-gpio driver replaces all hardware-specific
	I2C-over-GPIO drivers.
Who:	Jean Delvare <khali@linux-fr.org>

---------------------------
