mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Linux 3.8-rc1
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQEcBAABAgAGBQJQ1QqgAAoJEHm+PkMAQRiG3GMIAJZjN2+0EGFpcq0LDrjIMyLG PFuCkn9wNybAVR38DuVJkYclLclN2T1CevWZib+GgRLZO2IU5Qu1xh+fCLRn1u5i qrxq8g4HYVMYXDixdZzXA2eXCLF7YLzPEdlowoBItGl9OJjQdzk3zBATtJGxfKaP zvmaXP0CyoQekrZmmpMEl2/PLY/X0Ett6I5tlKcTvYKbbowG1SoAwVEVokCZC/vi I+y8/8M68eDfOfYZ8BoRd5Lsygxfw8uvOce4qUeKawiZPO8bWP1s9NFyK6Ank6+s hNXM9dNm6l0JfS+Ykb2FXleuEmOaaloRswOxukU1gKC3V0HdxwKx0Ir4P3z1dHM= =5Iln -----END PGP SIGNATURE----- Merge tag 'v3.8-rc1' into staging/for_v3.9 Linux 3.8-rc1 * tag 'v3.8-rc1': (10696 commits) Linux 3.8-rc1 Revert "nfsd: warn on odd reply state in nfsd_vfs_read" ARM: dts: fix duplicated build target and alphabetical sort out for exynos dm stripe: add WRITE SAME support dm: remove map_info dm snapshot: do not use map_context dm thin: dont use map_context dm raid1: dont use map_context dm flakey: dont use map_context dm raid1: rename read_record to bio_record dm: move target request nr to dm_target_io dm snapshot: use per_bio_data dm verity: use per_bio_data dm raid1: use per_bio_data dm: introduce per_bio_data dm kcopyd: add WRITE SAME support to dm_kcopyd_zero dm linear: add WRITE SAME support dm: add WRITE SAME support dm: prepare to support WRITE SAME dm ioctl: use kmalloc if possible ... Conflicts: MAINTAINERS
This commit is contained in:
commit
a44dca1717
9764 changed files with 493861 additions and 285433 deletions
|
|
@ -1141,23 +1141,13 @@ int max_width, max_height;</synopsis>
|
|||
the <methodname>page_flip</methodname> operation will be called with a
|
||||
non-NULL <parameter>event</parameter> argument pointing to a
|
||||
<structname>drm_pending_vblank_event</structname> instance. Upon page
|
||||
flip completion the driver must fill the
|
||||
<parameter>event</parameter>::<structfield>event</structfield>
|
||||
<structfield>sequence</structfield>, <structfield>tv_sec</structfield>
|
||||
and <structfield>tv_usec</structfield> fields with the associated
|
||||
vertical blanking count and timestamp, add the event to the
|
||||
<parameter>drm_file</parameter> list of events to be signaled, and wake
|
||||
up any waiting process. This can be performed with
|
||||
flip completion the driver must call <methodname>drm_send_vblank_event</methodname>
|
||||
to fill in the event and send to wake up any waiting processes.
|
||||
This can be performed with
|
||||
<programlisting><![CDATA[
|
||||
struct timeval now;
|
||||
|
||||
event->event.sequence = drm_vblank_count_and_time(..., &now);
|
||||
event->event.tv_sec = now.tv_sec;
|
||||
event->event.tv_usec = now.tv_usec;
|
||||
|
||||
spin_lock_irqsave(&dev->event_lock, flags);
|
||||
list_add_tail(&event->base.link, &event->base.file_priv->event_list);
|
||||
wake_up_interruptible(&event->base.file_priv->event_wait);
|
||||
...
|
||||
drm_send_vblank_event(dev, pipe, event);
|
||||
spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||
]]></programlisting>
|
||||
</para>
|
||||
|
|
@ -1621,10 +1611,10 @@ void intel_crt_init(struct drm_device *dev)
|
|||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- Internals: mid-layer helper functions -->
|
||||
<!-- Internals: kms helper functions -->
|
||||
|
||||
<sect1>
|
||||
<title>Mid-layer Helper Functions</title>
|
||||
<title>Mode Setting Helper Functions</title>
|
||||
<para>
|
||||
The CRTC, encoder and connector functions provided by the drivers
|
||||
implement the DRM API. They're called by the DRM core and ioctl handlers
|
||||
|
|
@ -2106,6 +2096,21 @@ void intel_crt_init(struct drm_device *dev)
|
|||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Modeset Helper Functions Reference</title>
|
||||
!Edrivers/gpu/drm/drm_crtc_helper.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>fbdev Helper Functions Reference</title>
|
||||
!Pdrivers/gpu/drm/drm_fb_helper.c fbdev helpers
|
||||
!Edrivers/gpu/drm/drm_fb_helper.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Display Port Helper Functions Reference</title>
|
||||
!Pdrivers/gpu/drm/drm_dp_helper.c dp helpers
|
||||
!Iinclude/drm/drm_dp_helper.h
|
||||
!Edrivers/gpu/drm/drm_dp_helper.c
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- Internals: vertical blanking -->
|
||||
|
|
|
|||
|
|
@ -671,7 +671,7 @@ than a kernel driver.
|
|||
<para>There's a USB Mass Storage class driver, which provides
|
||||
a different solution for interoperability with systems such
|
||||
as MS-Windows and MacOS.
|
||||
That <emphasis>File-backed Storage</emphasis> driver uses a
|
||||
That <emphasis>Mass Storage</emphasis> driver uses a
|
||||
file or block device as backing store for a drive,
|
||||
like the <filename>loop</filename> driver.
|
||||
The USB host uses the BBB, CB, or CBI versions of the mass
|
||||
|
|
|
|||
|
|
@ -58,6 +58,9 @@
|
|||
|
||||
<sect1><title>String Conversions</title>
|
||||
!Elib/vsprintf.c
|
||||
!Finclude/linux/kernel.h kstrtol
|
||||
!Finclude/linux/kernel.h kstrtoul
|
||||
!Elib/kstrtox.c
|
||||
</sect1>
|
||||
<sect1><title>String Manipulation</title>
|
||||
<!-- All functions are exported at now
|
||||
|
|
|
|||
|
|
@ -719,6 +719,62 @@ framework to set up sysfs files for this region. Simply leave it alone.
|
|||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="using uio_dmem_genirq">
|
||||
<title>Using uio_dmem_genirq for platform devices</title>
|
||||
<para>
|
||||
In addition to statically allocated memory ranges, they may also be
|
||||
a desire to use dynamically allocated regions in a user space driver.
|
||||
In particular, being able to access memory made available through the
|
||||
dma-mapping API, may be particularly useful. The
|
||||
<varname>uio_dmem_genirq</varname> driver provides a way to accomplish
|
||||
this.
|
||||
</para>
|
||||
<para>
|
||||
This driver is used in a similar manner to the
|
||||
<varname>"uio_pdrv_genirq"</varname> driver with respect to interrupt
|
||||
configuration and handling.
|
||||
</para>
|
||||
<para>
|
||||
Set the <varname>.name</varname> element of
|
||||
<varname>struct platform_device</varname> to
|
||||
<varname>"uio_dmem_genirq"</varname> to use this driver.
|
||||
</para>
|
||||
<para>
|
||||
When using this driver, fill in the <varname>.platform_data</varname>
|
||||
element of <varname>struct platform_device</varname>, which is of type
|
||||
<varname>struct uio_dmem_genirq_pdata</varname> and which contains the
|
||||
following elements:
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem><varname>struct uio_info uioinfo</varname>: The same
|
||||
structure used as the <varname>uio_pdrv_genirq</varname> platform
|
||||
data</listitem>
|
||||
<listitem><varname>unsigned int *dynamic_region_sizes</varname>:
|
||||
Pointer to list of sizes of dynamic memory regions to be mapped into
|
||||
user space.
|
||||
</listitem>
|
||||
<listitem><varname>unsigned int num_dynamic_regions</varname>:
|
||||
Number of elements in <varname>dynamic_region_sizes</varname> array.
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>
|
||||
The dynamic regions defined in the platform data will be appended to
|
||||
the <varname> mem[] </varname> array after the platform device
|
||||
resources, which implies that the total number of static and dynamic
|
||||
memory regions cannot exceed <varname>MAX_UIO_MAPS</varname>.
|
||||
</para>
|
||||
<para>
|
||||
The dynamic memory regions will be allocated when the UIO device file,
|
||||
<varname>/dev/uioX</varname> is opened.
|
||||
Simiar to static memory resources, the memory region information for
|
||||
dynamic regions is then visible via sysfs at
|
||||
<varname>/sys/class/uio/uioX/maps/mapY/*</varname>.
|
||||
The dynmaic memory regions will be freed when the UIO device file is
|
||||
closed. When no processes are holding the device file open, the address
|
||||
returned to userspace is ~0.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
||||
<chapter id="userspace_driver" xreflabel="Writing a driver in user space">
|
||||
|
|
|
|||
|
|
@ -433,9 +433,9 @@
|
|||
/* chip-specific constructor
|
||||
* (see "Management of Cards and Components")
|
||||
*/
|
||||
static int __devinit snd_mychip_create(struct snd_card *card,
|
||||
struct pci_dev *pci,
|
||||
struct mychip **rchip)
|
||||
static int snd_mychip_create(struct snd_card *card,
|
||||
struct pci_dev *pci,
|
||||
struct mychip **rchip)
|
||||
{
|
||||
struct mychip *chip;
|
||||
int err;
|
||||
|
|
@ -475,8 +475,8 @@
|
|||
}
|
||||
|
||||
/* constructor -- see "Constructor" sub-section */
|
||||
static int __devinit snd_mychip_probe(struct pci_dev *pci,
|
||||
const struct pci_device_id *pci_id)
|
||||
static int snd_mychip_probe(struct pci_dev *pci,
|
||||
const struct pci_device_id *pci_id)
|
||||
{
|
||||
static int dev;
|
||||
struct snd_card *card;
|
||||
|
|
@ -526,7 +526,7 @@
|
|||
}
|
||||
|
||||
/* destructor -- see the "Destructor" sub-section */
|
||||
static void __devexit snd_mychip_remove(struct pci_dev *pci)
|
||||
static void snd_mychip_remove(struct pci_dev *pci)
|
||||
{
|
||||
snd_card_free(pci_get_drvdata(pci));
|
||||
pci_set_drvdata(pci, NULL);
|
||||
|
|
@ -542,9 +542,8 @@
|
|||
<para>
|
||||
The real constructor of PCI drivers is the <function>probe</function> callback.
|
||||
The <function>probe</function> callback and other component-constructors which are called
|
||||
from the <function>probe</function> callback should be defined with
|
||||
the <parameter>__devinit</parameter> prefix. You
|
||||
cannot use the <parameter>__init</parameter> prefix for them,
|
||||
from the <function>probe</function> callback cannot be used with
|
||||
the <parameter>__init</parameter> prefix
|
||||
because any PCI device could be a hotplug device.
|
||||
</para>
|
||||
|
||||
|
|
@ -728,7 +727,7 @@
|
|||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static void __devexit snd_mychip_remove(struct pci_dev *pci)
|
||||
static void snd_mychip_remove(struct pci_dev *pci)
|
||||
{
|
||||
snd_card_free(pci_get_drvdata(pci));
|
||||
pci_set_drvdata(pci, NULL);
|
||||
|
|
@ -1058,14 +1057,6 @@
|
|||
components are released automatically by this call.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
As further notes, the destructors (both
|
||||
<function>snd_mychip_dev_free</function> and
|
||||
<function>snd_mychip_free</function>) cannot be defined with
|
||||
the <parameter>__devexit</parameter> prefix, because they may be
|
||||
called from the constructor, too, at the false path.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
For a device which allows hotplugging, you can use
|
||||
<function>snd_card_free_when_closed</function>. This one will
|
||||
|
|
@ -1120,9 +1111,9 @@
|
|||
}
|
||||
|
||||
/* chip-specific constructor */
|
||||
static int __devinit snd_mychip_create(struct snd_card *card,
|
||||
struct pci_dev *pci,
|
||||
struct mychip **rchip)
|
||||
static int snd_mychip_create(struct snd_card *card,
|
||||
struct pci_dev *pci,
|
||||
struct mychip **rchip)
|
||||
{
|
||||
struct mychip *chip;
|
||||
int err;
|
||||
|
|
@ -1200,7 +1191,7 @@
|
|||
.name = KBUILD_MODNAME,
|
||||
.id_table = snd_mychip_ids,
|
||||
.probe = snd_mychip_probe,
|
||||
.remove = __devexit_p(snd_mychip_remove),
|
||||
.remove = snd_mychip_remove,
|
||||
};
|
||||
|
||||
/* module initialization */
|
||||
|
|
@ -1464,11 +1455,6 @@
|
|||
</informalexample>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Again, remember that you cannot
|
||||
use the <parameter>__devexit</parameter> prefix for this destructor.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
We didn't implement the hardware disabling part in the above.
|
||||
If you need to do this, please note that the destructor may be
|
||||
|
|
@ -1619,7 +1605,7 @@
|
|||
.name = KBUILD_MODNAME,
|
||||
.id_table = snd_mychip_ids,
|
||||
.probe = snd_mychip_probe,
|
||||
.remove = __devexit_p(snd_mychip_remove),
|
||||
.remove = snd_mychip_remove,
|
||||
};
|
||||
]]>
|
||||
</programlisting>
|
||||
|
|
@ -1630,11 +1616,7 @@
|
|||
The <structfield>probe</structfield> and
|
||||
<structfield>remove</structfield> functions have already
|
||||
been defined in the previous sections.
|
||||
The <structfield>remove</structfield> function should
|
||||
be defined with the
|
||||
<function>__devexit_p()</function> macro, so that it's not
|
||||
defined for built-in (and non-hot-pluggable) case. The
|
||||
<structfield>name</structfield>
|
||||
The <structfield>name</structfield>
|
||||
field is the name string of this device. Note that you must not
|
||||
use a slash <quote>/</quote> in this string.
|
||||
</para>
|
||||
|
|
@ -1665,9 +1647,7 @@
|
|||
<para>
|
||||
Note that these module entries are tagged with
|
||||
<parameter>__init</parameter> and
|
||||
<parameter>__exit</parameter> prefixes, not
|
||||
<parameter>__devinit</parameter> nor
|
||||
<parameter>__devexit</parameter>.
|
||||
<parameter>__exit</parameter> prefixes.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
|
@ -1918,7 +1898,7 @@
|
|||
*/
|
||||
|
||||
/* create a pcm device */
|
||||
static int __devinit snd_mychip_new_pcm(struct mychip *chip)
|
||||
static int snd_mychip_new_pcm(struct mychip *chip)
|
||||
{
|
||||
struct snd_pcm *pcm;
|
||||
int err;
|
||||
|
|
@ -1957,7 +1937,7 @@
|
|||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static int __devinit snd_mychip_new_pcm(struct mychip *chip)
|
||||
static int snd_mychip_new_pcm(struct mychip *chip)
|
||||
{
|
||||
struct snd_pcm *pcm;
|
||||
int err;
|
||||
|
|
@ -2124,7 +2104,7 @@
|
|||
....
|
||||
}
|
||||
|
||||
static int __devinit snd_mychip_new_pcm(struct mychip *chip)
|
||||
static int snd_mychip_new_pcm(struct mychip *chip)
|
||||
{
|
||||
struct snd_pcm *pcm;
|
||||
....
|
||||
|
|
@ -3399,7 +3379,7 @@ struct _snd_pcm_runtime {
|
|||
<title>Definition of a Control</title>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static struct snd_kcontrol_new my_control __devinitdata = {
|
||||
static struct snd_kcontrol_new my_control = {
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||
.name = "PCM Playback Switch",
|
||||
.index = 0,
|
||||
|
|
@ -3414,13 +3394,6 @@ struct _snd_pcm_runtime {
|
|||
</example>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Most likely the control is created via
|
||||
<function>snd_ctl_new1()</function>, and in such a case, you can
|
||||
add the <parameter>__devinitdata</parameter> prefix to the
|
||||
definition as above.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <structfield>iface</structfield> field specifies the control
|
||||
type, <constant>SNDRV_CTL_ELEM_IFACE_XXX</constant>, which
|
||||
|
|
@ -3847,10 +3820,8 @@ struct _snd_pcm_runtime {
|
|||
|
||||
<para>
|
||||
<function>snd_ctl_new1()</function> allocates a new
|
||||
<structname>snd_kcontrol</structname> instance (that's why the definition
|
||||
of <parameter>my_control</parameter> can be with
|
||||
the <parameter>__devinitdata</parameter>
|
||||
prefix), and <function>snd_ctl_add</function> assigns the given
|
||||
<structname>snd_kcontrol</structname> instance,
|
||||
and <function>snd_ctl_add</function> assigns the given
|
||||
control component to the card.
|
||||
</para>
|
||||
</section>
|
||||
|
|
@ -3896,7 +3867,7 @@ struct _snd_pcm_runtime {
|
|||
<![CDATA[
|
||||
static DECLARE_TLV_DB_SCALE(db_scale_my_control, -4050, 150, 0);
|
||||
|
||||
static struct snd_kcontrol_new my_control __devinitdata = {
|
||||
static struct snd_kcontrol_new my_control = {
|
||||
...
|
||||
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
||||
SNDRV_CTL_ELEM_ACCESS_TLV_READ,
|
||||
|
|
@ -5761,8 +5732,8 @@ struct _snd_pcm_runtime {
|
|||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static int __devinit snd_mychip_probe(struct pci_dev *pci,
|
||||
const struct pci_device_id *pci_id)
|
||||
static int snd_mychip_probe(struct pci_dev *pci,
|
||||
const struct pci_device_id *pci_id)
|
||||
{
|
||||
....
|
||||
struct snd_card *card;
|
||||
|
|
@ -5787,8 +5758,8 @@ struct _snd_pcm_runtime {
|
|||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static int __devinit snd_mychip_probe(struct pci_dev *pci,
|
||||
const struct pci_device_id *pci_id)
|
||||
static int snd_mychip_probe(struct pci_dev *pci,
|
||||
const struct pci_device_id *pci_id)
|
||||
{
|
||||
....
|
||||
struct snd_card *card;
|
||||
|
|
@ -5825,7 +5796,7 @@ struct _snd_pcm_runtime {
|
|||
.name = KBUILD_MODNAME,
|
||||
.id_table = snd_my_ids,
|
||||
.probe = snd_my_probe,
|
||||
.remove = __devexit_p(snd_my_remove),
|
||||
.remove = snd_my_remove,
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = snd_my_suspend,
|
||||
.resume = snd_my_resume,
|
||||
|
|
|
|||
Loading…
Reference in a new issue