mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge branches 'ftrace', 'gic', 'io', 'kexec', 'mod', 'sa11x0', 'sh' and 'versatile' into devel
This commit is contained in:
parent
3c0eee3fe6
ed60453fa8
ac61d143ff
28257f7fde
b230653132
50005a8deb
cf562b4a55
3d09fbcd26
8a9618f5df
commit
31edf274f9
84 changed files with 1612 additions and 753 deletions
|
|
@ -50,8 +50,9 @@ sa1111_cs-$(CONFIG_SA1100_JORNADA720) += sa1100_jornada720.o
|
|||
sa1100_cs-y += sa1100_generic.o
|
||||
sa1100_cs-$(CONFIG_SA1100_ASSABET) += sa1100_assabet.o
|
||||
sa1100_cs-$(CONFIG_SA1100_CERF) += sa1100_cerf.o
|
||||
sa1100_cs-$(CONFIG_SA1100_COLLIE) += pxa2xx_sharpsl.o
|
||||
sa1100_cs-$(CONFIG_SA1100_COLLIE) += pxa2xx_sharpsl.o
|
||||
sa1100_cs-$(CONFIG_SA1100_H3600) += sa1100_h3600.o
|
||||
sa1100_cs-$(CONFIG_SA1100_NANOENGINE) += sa1100_nanoengine.o
|
||||
sa1100_cs-$(CONFIG_SA1100_SHANNON) += sa1100_shannon.o
|
||||
sa1100_cs-$(CONFIG_SA1100_SIMPAD) += sa1100_simpad.o
|
||||
|
||||
|
|
|
|||
|
|
@ -53,6 +53,9 @@ static int (*sa11x0_pcmcia_hw_init[])(struct device *dev) = {
|
|||
#if defined(CONFIG_SA1100_H3100) || defined(CONFIG_SA1100_H3600)
|
||||
pcmcia_h3600_init,
|
||||
#endif
|
||||
#ifdef CONFIG_SA1100_NANOENGINE
|
||||
pcmcia_nanoengine_init,
|
||||
#endif
|
||||
#ifdef CONFIG_SA1100_SHANNON
|
||||
pcmcia_shannon_init,
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ extern int pcmcia_freebird_init(struct device *);
|
|||
extern int pcmcia_gcplus_init(struct device *);
|
||||
extern int pcmcia_graphicsmaster_init(struct device *);
|
||||
extern int pcmcia_h3600_init(struct device *);
|
||||
extern int pcmcia_nanoengine_init(struct device *);
|
||||
extern int pcmcia_pangolin_init(struct device *);
|
||||
extern int pcmcia_pfs168_init(struct device *);
|
||||
extern int pcmcia_shannon_init(struct device *);
|
||||
|
|
|
|||
219
drivers/pcmcia/sa1100_nanoengine.c
Normal file
219
drivers/pcmcia/sa1100_nanoengine.c
Normal file
|
|
@ -0,0 +1,219 @@
|
|||
/*
|
||||
* drivers/pcmcia/sa1100_nanoengine.c
|
||||
*
|
||||
* PCMCIA implementation routines for BSI nanoEngine.
|
||||
*
|
||||
* In order to have a fully functional pcmcia subsystem in a BSE nanoEngine
|
||||
* board you should carefully read this:
|
||||
* http://cambuca.ldhs.cetuc.puc-rio.br/nanoengine/
|
||||
*
|
||||
* Copyright (C) 2010 Marcelo Roberto Jimenez <mroberto@cpti.cetuc.puc-rio.br>
|
||||
*
|
||||
* Based on original work for kernel 2.4 by
|
||||
* Miguel Freitas <miguel@cpti.cetuc.puc-rio.br>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
*/
|
||||
#include <linux/device.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/signal.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/nanoengine.h>
|
||||
|
||||
#include "sa1100_generic.h"
|
||||
|
||||
static struct pcmcia_irqs irqs_skt0[] = {
|
||||
/* socket, IRQ, name */
|
||||
{ 0, NANOENGINE_IRQ_GPIO_PC_CD0, "PC CD0" },
|
||||
};
|
||||
|
||||
static struct pcmcia_irqs irqs_skt1[] = {
|
||||
/* socket, IRQ, name */
|
||||
{ 1, NANOENGINE_IRQ_GPIO_PC_CD1, "PC CD1" },
|
||||
};
|
||||
|
||||
struct nanoengine_pins {
|
||||
unsigned input_pins;
|
||||
unsigned output_pins;
|
||||
unsigned clear_outputs;
|
||||
unsigned transition_pins;
|
||||
unsigned pci_irq;
|
||||
struct pcmcia_irqs *pcmcia_irqs;
|
||||
unsigned pcmcia_irqs_size;
|
||||
};
|
||||
|
||||
static struct nanoengine_pins nano_skts[] = {
|
||||
{
|
||||
.input_pins = GPIO_PC_READY0 | GPIO_PC_CD0,
|
||||
.output_pins = GPIO_PC_RESET0,
|
||||
.clear_outputs = GPIO_PC_RESET0,
|
||||
.transition_pins = NANOENGINE_IRQ_GPIO_PC_CD0,
|
||||
.pci_irq = NANOENGINE_IRQ_GPIO_PC_READY0,
|
||||
.pcmcia_irqs = irqs_skt0,
|
||||
.pcmcia_irqs_size = ARRAY_SIZE(irqs_skt0)
|
||||
}, {
|
||||
.input_pins = GPIO_PC_READY1 | GPIO_PC_CD1,
|
||||
.output_pins = GPIO_PC_RESET1,
|
||||
.clear_outputs = GPIO_PC_RESET1,
|
||||
.transition_pins = NANOENGINE_IRQ_GPIO_PC_CD1,
|
||||
.pci_irq = NANOENGINE_IRQ_GPIO_PC_READY1,
|
||||
.pcmcia_irqs = irqs_skt1,
|
||||
.pcmcia_irqs_size = ARRAY_SIZE(irqs_skt1)
|
||||
}
|
||||
};
|
||||
|
||||
unsigned num_nano_pcmcia_sockets = ARRAY_SIZE(nano_skts);
|
||||
|
||||
static int nanoengine_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
|
||||
{
|
||||
unsigned i = skt->nr;
|
||||
|
||||
if (i >= num_nano_pcmcia_sockets)
|
||||
return -ENXIO;
|
||||
|
||||
GPDR &= ~nano_skts[i].input_pins;
|
||||
GPDR |= nano_skts[i].output_pins;
|
||||
GPCR = nano_skts[i].clear_outputs;
|
||||
set_irq_type(nano_skts[i].transition_pins, IRQ_TYPE_EDGE_BOTH);
|
||||
skt->socket.pci_irq = nano_skts[i].pci_irq;
|
||||
|
||||
return soc_pcmcia_request_irqs(skt,
|
||||
nano_skts[i].pcmcia_irqs, nano_skts[i].pcmcia_irqs_size);
|
||||
}
|
||||
|
||||
/*
|
||||
* Release all resources.
|
||||
*/
|
||||
static void nanoengine_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
|
||||
{
|
||||
unsigned i = skt->nr;
|
||||
|
||||
if (i >= num_nano_pcmcia_sockets)
|
||||
return;
|
||||
|
||||
soc_pcmcia_free_irqs(skt,
|
||||
nano_skts[i].pcmcia_irqs, nano_skts[i].pcmcia_irqs_size);
|
||||
}
|
||||
|
||||
static int nanoengine_pcmcia_configure_socket(
|
||||
struct soc_pcmcia_socket *skt, const socket_state_t *state)
|
||||
{
|
||||
unsigned reset;
|
||||
unsigned i = skt->nr;
|
||||
|
||||
if (i >= num_nano_pcmcia_sockets)
|
||||
return -ENXIO;
|
||||
|
||||
switch (i) {
|
||||
case 0:
|
||||
reset = GPIO_PC_RESET0;
|
||||
break;
|
||||
case 1:
|
||||
reset = GPIO_PC_RESET1;
|
||||
break;
|
||||
default:
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if (state->flags & SS_RESET)
|
||||
GPSR = reset;
|
||||
else
|
||||
GPCR = reset;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void nanoengine_pcmcia_socket_state(
|
||||
struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
|
||||
{
|
||||
unsigned long levels = GPLR;
|
||||
unsigned i = skt->nr;
|
||||
|
||||
if (i >= num_nano_pcmcia_sockets)
|
||||
return;
|
||||
|
||||
memset(state, 0, sizeof(struct pcmcia_state));
|
||||
switch (i) {
|
||||
case 0:
|
||||
state->ready = (levels & GPIO_PC_READY0) ? 1 : 0;
|
||||
state->detect = !(levels & GPIO_PC_CD0) ? 1 : 0;
|
||||
break;
|
||||
case 1:
|
||||
state->ready = (levels & GPIO_PC_READY1) ? 1 : 0;
|
||||
state->detect = !(levels & GPIO_PC_CD1) ? 1 : 0;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
state->bvd1 = 1;
|
||||
state->bvd2 = 1;
|
||||
state->wrprot = 0; /* Not available */
|
||||
state->vs_3v = 1; /* Can only apply 3.3V */
|
||||
state->vs_Xv = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable card status IRQs on (re-)initialisation. This can
|
||||
* be called at initialisation, power management event, or
|
||||
* pcmcia event.
|
||||
*/
|
||||
static void nanoengine_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
|
||||
{
|
||||
unsigned i = skt->nr;
|
||||
|
||||
if (i >= num_nano_pcmcia_sockets)
|
||||
return;
|
||||
|
||||
soc_pcmcia_enable_irqs(skt,
|
||||
nano_skts[i].pcmcia_irqs, nano_skts[i].pcmcia_irqs_size);
|
||||
}
|
||||
|
||||
/*
|
||||
* Disable card status IRQs on suspend.
|
||||
*/
|
||||
static void nanoengine_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
|
||||
{
|
||||
unsigned i = skt->nr;
|
||||
|
||||
if (i >= num_nano_pcmcia_sockets)
|
||||
return;
|
||||
|
||||
soc_pcmcia_disable_irqs(skt,
|
||||
nano_skts[i].pcmcia_irqs, nano_skts[i].pcmcia_irqs_size);
|
||||
}
|
||||
|
||||
static struct pcmcia_low_level nanoengine_pcmcia_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
|
||||
.hw_init = nanoengine_pcmcia_hw_init,
|
||||
.hw_shutdown = nanoengine_pcmcia_hw_shutdown,
|
||||
|
||||
.configure_socket = nanoengine_pcmcia_configure_socket,
|
||||
.socket_state = nanoengine_pcmcia_socket_state,
|
||||
.socket_init = nanoengine_pcmcia_socket_init,
|
||||
.socket_suspend = nanoengine_pcmcia_socket_suspend,
|
||||
};
|
||||
|
||||
int pcmcia_nanoengine_init(struct device *dev)
|
||||
{
|
||||
int ret = -ENODEV;
|
||||
|
||||
if (machine_is_nanoengine())
|
||||
ret = sa11xx_drv_pcmcia_probe(
|
||||
dev, &nanoengine_pcmcia_ops, 0, 2);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -31,20 +31,20 @@
|
|||
======================================================================*/
|
||||
|
||||
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/timer.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#include "soc_common.h"
|
||||
|
|
@ -74,7 +74,8 @@ EXPORT_SYMBOL(soc_pcmcia_debug);
|
|||
|
||||
#endif
|
||||
|
||||
#define to_soc_pcmcia_socket(x) container_of(x, struct soc_pcmcia_socket, socket)
|
||||
#define to_soc_pcmcia_socket(x) \
|
||||
container_of(x, struct soc_pcmcia_socket, socket)
|
||||
|
||||
static unsigned short
|
||||
calc_speed(unsigned short *spds, int num, unsigned short dflt)
|
||||
|
|
@ -91,11 +92,15 @@ calc_speed(unsigned short *spds, int num, unsigned short dflt)
|
|||
return speed;
|
||||
}
|
||||
|
||||
void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *skt, struct soc_pcmcia_timing *timing)
|
||||
void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *skt,
|
||||
struct soc_pcmcia_timing *timing)
|
||||
{
|
||||
timing->io = calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS);
|
||||
timing->mem = calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
|
||||
timing->attr = calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
|
||||
timing->io =
|
||||
calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS);
|
||||
timing->mem =
|
||||
calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
|
||||
timing->attr =
|
||||
calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
|
||||
}
|
||||
EXPORT_SYMBOL(soc_common_pcmcia_get_timing);
|
||||
|
||||
|
|
@ -137,8 +142,8 @@ static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt)
|
|||
*
|
||||
* Convert PCMCIA socket state to our socket configure structure.
|
||||
*/
|
||||
static int
|
||||
soc_common_pcmcia_config_skt(struct soc_pcmcia_socket *skt, socket_state_t *state)
|
||||
static int soc_common_pcmcia_config_skt(
|
||||
struct soc_pcmcia_socket *skt, socket_state_t *state)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
@ -150,7 +155,8 @@ soc_common_pcmcia_config_skt(struct soc_pcmcia_socket *skt, socket_state_t *stat
|
|||
*/
|
||||
if (skt->irq_state != 1 && state->io_irq) {
|
||||
skt->irq_state = 1;
|
||||
set_irq_type(skt->socket.pci_irq, IRQ_TYPE_EDGE_FALLING);
|
||||
set_irq_type(skt->socket.pci_irq,
|
||||
IRQ_TYPE_EDGE_FALLING);
|
||||
} else if (skt->irq_state == 1 && state->io_irq == 0) {
|
||||
skt->irq_state = 0;
|
||||
set_irq_type(skt->socket.pci_irq, IRQ_TYPE_NONE);
|
||||
|
|
@ -304,24 +310,24 @@ soc_common_pcmcia_get_status(struct pcmcia_socket *sock, unsigned int *status)
|
|||
* of power configuration, reset, &c. We also record the value of
|
||||
* `state' in order to regurgitate it to the PCMCIA core later.
|
||||
*/
|
||||
static int
|
||||
soc_common_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
|
||||
static int soc_common_pcmcia_set_socket(
|
||||
struct pcmcia_socket *sock, socket_state_t *state)
|
||||
{
|
||||
struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
|
||||
|
||||
debug(skt, 2, "mask: %s%s%s%s%s%sflags: %s%s%s%s%s%sVcc %d Vpp %d irq %d\n",
|
||||
(state->csc_mask==0)?"<NONE> ":"",
|
||||
(state->csc_mask&SS_DETECT)?"DETECT ":"",
|
||||
(state->csc_mask&SS_READY)?"READY ":"",
|
||||
(state->csc_mask&SS_BATDEAD)?"BATDEAD ":"",
|
||||
(state->csc_mask&SS_BATWARN)?"BATWARN ":"",
|
||||
(state->csc_mask&SS_STSCHG)?"STSCHG ":"",
|
||||
(state->flags==0)?"<NONE> ":"",
|
||||
(state->flags&SS_PWR_AUTO)?"PWR_AUTO ":"",
|
||||
(state->flags&SS_IOCARD)?"IOCARD ":"",
|
||||
(state->flags&SS_RESET)?"RESET ":"",
|
||||
(state->flags&SS_SPKR_ENA)?"SPKR_ENA ":"",
|
||||
(state->flags&SS_OUTPUT_ENA)?"OUTPUT_ENA ":"",
|
||||
debug(skt, 2, "mask: %s%s%s%s%s%s flags: %s%s%s%s%s%s Vcc %d Vpp %d irq %d\n",
|
||||
(state->csc_mask == 0) ? "<NONE> " : "",
|
||||
(state->csc_mask & SS_DETECT) ? "DETECT " : "",
|
||||
(state->csc_mask & SS_READY) ? "READY " : "",
|
||||
(state->csc_mask & SS_BATDEAD) ? "BATDEAD " : "",
|
||||
(state->csc_mask & SS_BATWARN) ? "BATWARN " : "",
|
||||
(state->csc_mask & SS_STSCHG) ? "STSCHG " : "",
|
||||
(state->flags == 0) ? "<NONE> " : "",
|
||||
(state->flags & SS_PWR_AUTO) ? "PWR_AUTO " : "",
|
||||
(state->flags & SS_IOCARD) ? "IOCARD " : "",
|
||||
(state->flags & SS_RESET) ? "RESET " : "",
|
||||
(state->flags & SS_SPKR_ENA) ? "SPKR_ENA " : "",
|
||||
(state->flags & SS_OUTPUT_ENA) ? "OUTPUT_ENA " : "",
|
||||
state->Vcc, state->Vpp, state->io_irq);
|
||||
|
||||
return soc_common_pcmcia_config_skt(skt, state);
|
||||
|
|
@ -336,8 +342,8 @@ soc_common_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
|
|||
*
|
||||
* Returns: 0 on success, -1 on error
|
||||
*/
|
||||
static int
|
||||
soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *map)
|
||||
static int soc_common_pcmcia_set_io_map(
|
||||
struct pcmcia_socket *sock, struct pccard_io_map *map)
|
||||
{
|
||||
struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
|
||||
unsigned short speed = map->speed;
|
||||
|
|
@ -346,14 +352,14 @@ soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *m
|
|||
map->map, map->speed, (unsigned long long)map->start,
|
||||
(unsigned long long)map->stop);
|
||||
debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
|
||||
(map->flags==0)?"<NONE>":"",
|
||||
(map->flags&MAP_ACTIVE)?"ACTIVE ":"",
|
||||
(map->flags&MAP_16BIT)?"16BIT ":"",
|
||||
(map->flags&MAP_AUTOSZ)?"AUTOSZ ":"",
|
||||
(map->flags&MAP_0WS)?"0WS ":"",
|
||||
(map->flags&MAP_WRPROT)?"WRPROT ":"",
|
||||
(map->flags&MAP_USE_WAIT)?"USE_WAIT ":"",
|
||||
(map->flags&MAP_PREFETCH)?"PREFETCH ":"");
|
||||
(map->flags == 0) ? "<NONE>" : "",
|
||||
(map->flags & MAP_ACTIVE) ? "ACTIVE " : "",
|
||||
(map->flags & MAP_16BIT) ? "16BIT " : "",
|
||||
(map->flags & MAP_AUTOSZ) ? "AUTOSZ " : "",
|
||||
(map->flags & MAP_0WS) ? "0WS " : "",
|
||||
(map->flags & MAP_WRPROT) ? "WRPROT " : "",
|
||||
(map->flags & MAP_USE_WAIT) ? "USE_WAIT " : "",
|
||||
(map->flags & MAP_PREFETCH) ? "PREFETCH " : "");
|
||||
|
||||
if (map->map >= MAX_IO_WIN) {
|
||||
printk(KERN_ERR "%s(): map (%d) out of range\n", __func__,
|
||||
|
|
@ -390,8 +396,8 @@ soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *m
|
|||
*
|
||||
* Returns: 0 on success, -ERRNO on error
|
||||
*/
|
||||
static int
|
||||
soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *map)
|
||||
static int soc_common_pcmcia_set_mem_map(
|
||||
struct pcmcia_socket *sock, struct pccard_mem_map *map)
|
||||
{
|
||||
struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
|
||||
struct resource *res;
|
||||
|
|
@ -400,14 +406,14 @@ soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map
|
|||
debug(skt, 2, "map %u speed %u card_start %08x\n",
|
||||
map->map, map->speed, map->card_start);
|
||||
debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
|
||||
(map->flags==0)?"<NONE>":"",
|
||||
(map->flags&MAP_ACTIVE)?"ACTIVE ":"",
|
||||
(map->flags&MAP_16BIT)?"16BIT ":"",
|
||||
(map->flags&MAP_AUTOSZ)?"AUTOSZ ":"",
|
||||
(map->flags&MAP_0WS)?"0WS ":"",
|
||||
(map->flags&MAP_WRPROT)?"WRPROT ":"",
|
||||
(map->flags&MAP_ATTRIB)?"ATTRIB ":"",
|
||||
(map->flags&MAP_USE_WAIT)?"USE_WAIT ":"");
|
||||
(map->flags == 0) ? "<NONE>" : "",
|
||||
(map->flags & MAP_ACTIVE) ? "ACTIVE " : "",
|
||||
(map->flags & MAP_16BIT) ? "16BIT " : "",
|
||||
(map->flags & MAP_AUTOSZ) ? "AUTOSZ " : "",
|
||||
(map->flags & MAP_0WS) ? "0WS " : "",
|
||||
(map->flags & MAP_WRPROT) ? "WRPROT " : "",
|
||||
(map->flags & MAP_ATTRIB) ? "ATTRIB " : "",
|
||||
(map->flags & MAP_USE_WAIT) ? "USE_WAIT " : "");
|
||||
|
||||
if (map->map >= MAX_WIN)
|
||||
return -EINVAL;
|
||||
|
|
@ -462,8 +468,8 @@ static struct bittbl conf_bits[] = {
|
|||
{ SS_OUTPUT_ENA, "SS_OUTPUT_ENA" },
|
||||
};
|
||||
|
||||
static void
|
||||
dump_bits(char **p, const char *prefix, unsigned int val, struct bittbl *bits, int sz)
|
||||
static void dump_bits(char **p, const char *prefix,
|
||||
unsigned int val, struct bittbl *bits, int sz)
|
||||
{
|
||||
char *b = *p;
|
||||
int i;
|
||||
|
|
@ -481,13 +487,14 @@ dump_bits(char **p, const char *prefix, unsigned int val, struct bittbl *bits, i
|
|||
*
|
||||
* Returns: the number of characters added to the buffer
|
||||
*/
|
||||
static ssize_t show_status(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
static ssize_t show_status(
|
||||
struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct soc_pcmcia_socket *skt =
|
||||
container_of(dev, struct soc_pcmcia_socket, socket.dev);
|
||||
char *p = buf;
|
||||
|
||||
p+=sprintf(p, "slot : %d\n", skt->nr);
|
||||
p += sprintf(p, "slot : %d\n", skt->nr);
|
||||
|
||||
dump_bits(&p, "status", skt->status,
|
||||
status_bits, ARRAY_SIZE(status_bits));
|
||||
|
|
@ -496,12 +503,12 @@ static ssize_t show_status(struct device *dev, struct device_attribute *attr, ch
|
|||
dump_bits(&p, "cs_flags", skt->cs_state.flags,
|
||||
conf_bits, ARRAY_SIZE(conf_bits));
|
||||
|
||||
p+=sprintf(p, "Vcc : %d\n", skt->cs_state.Vcc);
|
||||
p+=sprintf(p, "Vpp : %d\n", skt->cs_state.Vpp);
|
||||
p+=sprintf(p, "IRQ : %d (%d)\n", skt->cs_state.io_irq,
|
||||
p += sprintf(p, "Vcc : %d\n", skt->cs_state.Vcc);
|
||||
p += sprintf(p, "Vpp : %d\n", skt->cs_state.Vpp);
|
||||
p += sprintf(p, "IRQ : %d (%d)\n", skt->cs_state.io_irq,
|
||||
skt->socket.pci_irq);
|
||||
if (skt->ops->show_timing)
|
||||
p+=skt->ops->show_timing(skt, p);
|
||||
p += skt->ops->show_timing(skt, p);
|
||||
|
||||
return p-buf;
|
||||
}
|
||||
|
|
@ -594,7 +601,7 @@ soc_pcmcia_notifier(struct notifier_block *nb, unsigned long val, void *data)
|
|||
|
||||
mutex_lock(&soc_pcmcia_sockets_lock);
|
||||
list_for_each_entry(skt, &soc_pcmcia_sockets, node)
|
||||
if ( skt->ops->frequency_change )
|
||||
if (skt->ops->frequency_change)
|
||||
ret += skt->ops->frequency_change(skt, val, freqs);
|
||||
mutex_unlock(&soc_pcmcia_sockets_lock);
|
||||
|
||||
|
|
@ -620,7 +627,8 @@ fs_initcall(soc_pcmcia_cpufreq_register);
|
|||
|
||||
static void soc_pcmcia_cpufreq_unregister(void)
|
||||
{
|
||||
cpufreq_unregister_notifier(&soc_pcmcia_notifier_block, CPUFREQ_TRANSITION_NOTIFIER);
|
||||
cpufreq_unregister_notifier(&soc_pcmcia_notifier_block,
|
||||
CPUFREQ_TRANSITION_NOTIFIER);
|
||||
}
|
||||
module_exit(soc_pcmcia_cpufreq_unregister);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue