~ubuntu-branches/debian/wheezy/linux-2.6/wheezy

« back to all changes in this revision

Viewing changes to drivers/pcmcia/pxa2xx_vpac270.c

  • Committer: Bazaar Package Importer
  • Author(s): Ben Hutchings, Ben Hutchings, Aurelien Jarno
  • Date: 2011-06-07 12:14:05 UTC
  • mfrom: (43.1.9 sid)
  • Revision ID: james.westby@ubuntu.com-20110607121405-i3h1rd7nrnd2b73h
Tags: 2.6.39-2
[ Ben Hutchings ]
* [x86] Enable BACKLIGHT_APPLE, replacing BACKLIGHT_MBP_NVIDIA
  (Closes: #627492)
* cgroups: Disable memory resource controller by default. Allow it
  to be enabled using kernel parameter 'cgroup_enable=memory'.
* rt2800usb: Enable support for more USB devices including
  Linksys WUSB600N (Closes: #596626) (this change was accidentally
  omitted from 2.6.39-1)
* [x86] Remove Celeron from list of processors supporting PAE. Most
  'Celeron M' models do not.
* Update debconf template translations:
  - Swedish (Martin Bagge) (Closes: #628932)
  - French (David Prévot) (Closes: #628191)
* aufs: Update for 2.6.39 (Closes: #627837)
* Add stable 2.6.39.1, including:
  - ext4: dont set PageUptodate in ext4_end_bio()
  - pata_cmd64x: fix boot crash on parisc (Closes: #622997, #622745)
  - ext3: Fix fs corruption when make_indexed_dir() fails
  - netfilter: nf_ct_sip: validate Content-Length in TCP SIP messages
  - sctp: fix race between sctp_bind_addr_free() and
    sctp_bind_addr_conflict()
  - sctp: fix memory leak of the ASCONF queue when free asoc
  - md/bitmap: fix saving of events_cleared and other state
  - cdc_acm: Fix oops when Droids MuIn LCD is connected
  - cx88: Fix conversion from BKL to fine-grained locks (Closes: #619827)
  - keys: Set cred->user_ns in key_replace_session_keyring (CVE-2011-2184)
  - tmpfs: fix race between truncate and writepage
  - nfs41: Correct offset for LAYOUTCOMMIT
  - xen/mmu: fix a race window causing leave_mm BUG()
  - ext4: fix possible use-after-free in ext4_remove_li_request()
  For the complete list of changes, see:
   http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.39.1
* Bump ABI to 2
* netfilter: Enable IP_SET, IP_SET_BITMAP_IP, IP_SET_BITMAP_IPMAC,
  IP_SET_BITMAP_PORT, IP_SET_HASH_IP, IP_SET_HASH_IPPORT,
  IP_SET_HASH_IPPORTIP, IP_SET_HASH_IPPORTNET, IP_SET_HASH_NET,
  IP_SET_HASH_NETPORT, IP_SET_LIST_SET, NETFILTER_XT_SET as modules
  (Closes: #629401)

[ Aurelien Jarno ]
* [mipsel/loongson-2f] Disable_SCSI_LPFC to workaround GCC ICE.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 *
4
4
 * Driver for Voipac PXA270 PCMCIA and CF sockets
5
5
 *
6
 
 * Copyright (C) 2010
7
 
 * Marek Vasut <marek.vasut@gmail.com>
 
6
 * Copyright (C) 2010-2011 Marek Vasut <marek.vasut@gmail.com>
8
7
 *
9
8
 * This program is free software; you can redistribute it and/or modify
10
9
 * it under the terms of the GNU General Public License version 2 as
22
21
 
23
22
#include "soc_common.h"
24
23
 
 
24
static struct gpio vpac270_pcmcia_gpios[] = {
 
25
        { GPIO84_VPAC270_PCMCIA_CD,     GPIOF_IN,       "PCMCIA Card Detect" },
 
26
        { GPIO35_VPAC270_PCMCIA_RDY,    GPIOF_IN,       "PCMCIA Ready" },
 
27
        { GPIO107_VPAC270_PCMCIA_PPEN,  GPIOF_INIT_LOW, "PCMCIA PPEN" },
 
28
        { GPIO11_VPAC270_PCMCIA_RESET,  GPIOF_INIT_LOW, "PCMCIA Reset" },
 
29
};
 
30
 
 
31
static struct gpio vpac270_cf_gpios[] = {
 
32
        { GPIO17_VPAC270_CF_CD,         GPIOF_IN,       "CF Card Detect" },
 
33
        { GPIO12_VPAC270_CF_RDY,        GPIOF_IN,       "CF Ready" },
 
34
        { GPIO16_VPAC270_CF_RESET,      GPIOF_INIT_LOW, "CF Reset" },
 
35
};
 
36
 
25
37
static struct pcmcia_irqs cd_irqs[] = {
26
38
        {
27
39
                .sock = 0,
40
52
        int ret;
41
53
 
42
54
        if (skt->nr == 0) {
43
 
                ret = gpio_request(GPIO84_VPAC270_PCMCIA_CD, "PCMCIA CD");
44
 
                if (ret)
45
 
                        goto err1;
46
 
                ret = gpio_direction_input(GPIO84_VPAC270_PCMCIA_CD);
47
 
                if (ret)
48
 
                        goto err2;
49
 
 
50
 
                ret = gpio_request(GPIO35_VPAC270_PCMCIA_RDY, "PCMCIA RDY");
51
 
                if (ret)
52
 
                        goto err2;
53
 
                ret = gpio_direction_input(GPIO35_VPAC270_PCMCIA_RDY);
54
 
                if (ret)
55
 
                        goto err3;
56
 
 
57
 
                ret = gpio_request(GPIO107_VPAC270_PCMCIA_PPEN, "PCMCIA PPEN");
58
 
                if (ret)
59
 
                        goto err3;
60
 
                ret = gpio_direction_output(GPIO107_VPAC270_PCMCIA_PPEN, 0);
61
 
                if (ret)
62
 
                        goto err4;
63
 
 
64
 
                ret = gpio_request(GPIO11_VPAC270_PCMCIA_RESET, "PCMCIA RESET");
65
 
                if (ret)
66
 
                        goto err4;
67
 
                ret = gpio_direction_output(GPIO11_VPAC270_PCMCIA_RESET, 0);
68
 
                if (ret)
69
 
                        goto err5;
 
55
                ret = gpio_request_array(vpac270_pcmcia_gpios,
 
56
                                ARRAY_SIZE(vpac270_pcmcia_gpios));
70
57
 
71
58
                skt->socket.pci_irq = gpio_to_irq(GPIO35_VPAC270_PCMCIA_RDY);
72
59
 
73
 
                return soc_pcmcia_request_irqs(skt, &cd_irqs[0], 1);
74
 
 
75
 
err5:
76
 
                gpio_free(GPIO11_VPAC270_PCMCIA_RESET);
77
 
err4:
78
 
                gpio_free(GPIO107_VPAC270_PCMCIA_PPEN);
79
 
err3:
80
 
                gpio_free(GPIO35_VPAC270_PCMCIA_RDY);
81
 
err2:
82
 
                gpio_free(GPIO84_VPAC270_PCMCIA_CD);
83
 
err1:
84
 
                return ret;
85
 
 
 
60
                if (!ret)
 
61
                        ret = soc_pcmcia_request_irqs(skt, &cd_irqs[0], 1);
86
62
        } else {
87
 
                ret = gpio_request(GPIO17_VPAC270_CF_CD, "CF CD");
88
 
                if (ret)
89
 
                        goto err6;
90
 
                ret = gpio_direction_input(GPIO17_VPAC270_CF_CD);
91
 
                if (ret)
92
 
                        goto err7;
93
 
 
94
 
                ret = gpio_request(GPIO12_VPAC270_CF_RDY, "CF RDY");
95
 
                if (ret)
96
 
                        goto err7;
97
 
                ret = gpio_direction_input(GPIO12_VPAC270_CF_RDY);
98
 
                if (ret)
99
 
                        goto err8;
100
 
 
101
 
                ret = gpio_request(GPIO16_VPAC270_CF_RESET, "CF RESET");
102
 
                if (ret)
103
 
                        goto err8;
104
 
                ret = gpio_direction_output(GPIO16_VPAC270_CF_RESET, 0);
105
 
                if (ret)
106
 
                        goto err9;
 
63
                ret = gpio_request_array(vpac270_cf_gpios,
 
64
                                ARRAY_SIZE(vpac270_cf_gpios));
107
65
 
108
66
                skt->socket.pci_irq = gpio_to_irq(GPIO12_VPAC270_CF_RDY);
109
67
 
110
 
                return soc_pcmcia_request_irqs(skt, &cd_irqs[1], 1);
111
 
 
112
 
err9:
113
 
                gpio_free(GPIO16_VPAC270_CF_RESET);
114
 
err8:
115
 
                gpio_free(GPIO12_VPAC270_CF_RDY);
116
 
err7:
117
 
                gpio_free(GPIO17_VPAC270_CF_CD);
118
 
err6:
119
 
                return ret;
120
 
 
 
68
                if (!ret)
 
69
                        ret = soc_pcmcia_request_irqs(skt, &cd_irqs[1], 1);
121
70
        }
 
71
 
 
72
        return ret;
122
73
}
123
74
 
124
75
static void vpac270_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
125
76
{
126
 
        gpio_free(GPIO11_VPAC270_PCMCIA_RESET);
127
 
        gpio_free(GPIO107_VPAC270_PCMCIA_PPEN);
128
 
        gpio_free(GPIO35_VPAC270_PCMCIA_RDY);
129
 
        gpio_free(GPIO84_VPAC270_PCMCIA_CD);
130
 
        gpio_free(GPIO16_VPAC270_CF_RESET);
131
 
        gpio_free(GPIO12_VPAC270_CF_RDY);
132
 
        gpio_free(GPIO17_VPAC270_CF_CD);
 
77
        if (skt->nr == 0)
 
78
                gpio_request_array(vpac270_pcmcia_gpios,
 
79
                                        ARRAY_SIZE(vpac270_pcmcia_gpios));
 
80
        else
 
81
                gpio_request_array(vpac270_cf_gpios,
 
82
                                        ARRAY_SIZE(vpac270_cf_gpios));
133
83
}
134
84
 
135
85
static void vpac270_pcmcia_socket_state(struct soc_pcmcia_socket *skt,