Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 73837
b: refs/heads/master
c: 9778385
h: refs/heads/master
i:
  73835: 704330b
v: v3
  • Loading branch information
Christian Borntraeger authored and Ingo Molnar committed Nov 15, 2007
1 parent 80f699a commit e45fbb6
Show file tree
Hide file tree
Showing 16 changed files with 61 additions and 158 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ecefe4a1c3dcc802c23ef42de6caa08730cfc1a1
refs/heads/master: 9778385db35a799d410039be123044a0d3e917a2
3 changes: 3 additions & 0 deletions trunk/arch/avr32/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ config AVR32
There is an AVR32 Linux project with a web page at
http://avr32linux.org/.

config UID16
bool

config GENERIC_GPIO
bool
default y
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/avr32/mach-at32ap/at32ap7000.c
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ static struct resource at32ap700x_rtc0_resource[] = {
static struct resource at32_wdt0_resource[] = {
{
.start = 0xfff000b0,
.end = 0xfff000cf,
.end = 0xfff000bf,
.flags = IORESOURCE_MEM,
},
};
Expand Down Expand Up @@ -690,7 +690,7 @@ static struct resource atmel_usart0_resource[] = {
IRQ(6),
};
DEFINE_DEV_DATA(atmel_usart, 0);
DEV_CLK(usart, atmel_usart0, pba, 3);
DEV_CLK(usart, atmel_usart0, pba, 4);

static struct atmel_uart_data atmel_usart1_data = {
.use_dma_tx = 1,
Expand Down
1 change: 1 addition & 0 deletions trunk/arch/avr32/mach-at32ap/hsmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#define DEBUG
#include <linux/clk.h>
#include <linux/err.h>
#include <linux/init.h>
Expand Down
4 changes: 1 addition & 3 deletions trunk/arch/avr32/mach-at32ap/intc.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
#include <linux/irq.h>
#include <linux/platform_device.h>

#include <asm/intc.h>
#include <asm/io.h>

#include "intc.h"
Expand Down Expand Up @@ -137,8 +136,7 @@ void __init init_IRQ(void)
panic("Interrupt controller initialization failed!\n");
}

unsigned long intc_get_pending(unsigned int group)
unsigned long intc_get_pending(int group)
{
return intc_readl(&intc0, INTREQ0 + 4 * group);
}
EXPORT_SYMBOL_GPL(intc_get_pending);
7 changes: 1 addition & 6 deletions trunk/drivers/i2c/busses/i2c-pasemi.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ struct pasemi_smbus {
#define MRXFIFO_DATA_M 0x000000ff

#define SMSTA_XEN 0x08000000
#define SMSTA_MTN 0x00200000

#define CTL_MRR 0x00000400
#define CTL_MTR 0x00000200
Expand Down Expand Up @@ -99,10 +98,6 @@ static unsigned int pasemi_smb_waitready(struct pasemi_smbus *smbus)
status = reg_read(smbus, REG_SMSTA);
}

/* Got NACK? */
if (status & SMSTA_MTN)
return -ENXIO;

if (timeout < 0) {
dev_warn(&smbus->dev->dev, "Timeout, status 0x%08x\n", status);
reg_write(smbus, REG_SMSTA, status);
Expand Down Expand Up @@ -369,7 +364,7 @@ static int __devinit pasemi_smb_probe(struct pci_dev *dev,
smbus->adapter.algo = &smbus_algorithm;
smbus->adapter.algo_data = smbus;

/* set up the sysfs linkage to our parent device */
/* set up the driverfs linkage to our parent device */
smbus->adapter.dev.parent = &dev->dev;

reg_write(smbus, REG_CTL, (CTL_MTR | CTL_MRR |
Expand Down
37 changes: 13 additions & 24 deletions trunk/drivers/i2c/chips/eeprom.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,20 +128,13 @@ static ssize_t eeprom_read(struct kobject *kobj, struct bin_attribute *bin_attr,
for (slice = off >> 5; slice <= (off + count - 1) >> 5; slice++)
eeprom_update_client(client, slice);

/* Hide Vaio private settings to regular users:
- BIOS passwords: bytes 0x00 to 0x0f
- UUID: bytes 0x10 to 0x1f
- Serial number: 0xc0 to 0xdf */
if (data->nature == VAIO && !capable(CAP_SYS_ADMIN)) {
int i;

for (i = 0; i < count; i++) {
if ((off + i <= 0x1f) ||
(off + i >= 0xc0 && off + i <= 0xdf))
buf[i] = 0;
else
buf[i] = data->data[off + i];
}
/* Hide Vaio security settings to regular users (16 first bytes) */
if (data->nature == VAIO && off < 16 && !capable(CAP_SYS_ADMIN)) {
size_t in_row1 = 16 - off;
in_row1 = min(in_row1, count);
memset(buf, 0, in_row1);
if (count - in_row1 > 0)
memcpy(buf + in_row1, &data->data[16], count - in_row1);
} else {
memcpy(buf, &data->data[off], count);
}
Expand Down Expand Up @@ -204,18 +197,14 @@ static int eeprom_detect(struct i2c_adapter *adapter, int address, int kind)
goto exit_kfree;

/* Detect the Vaio nature of EEPROMs.
We use the "PCG-" or "VGN-" prefix as the signature. */
We use the "PCG-" prefix as the signature. */
if (address == 0x57) {
char name[4];

name[0] = i2c_smbus_read_byte_data(new_client, 0x80);
name[1] = i2c_smbus_read_byte(new_client);
name[2] = i2c_smbus_read_byte(new_client);
name[3] = i2c_smbus_read_byte(new_client);

if (!memcmp(name, "PCG-", 4) || !memcmp(name, "VGN-", 4)) {
if (i2c_smbus_read_byte_data(new_client, 0x80) == 'P'
&& i2c_smbus_read_byte(new_client) == 'C'
&& i2c_smbus_read_byte(new_client) == 'G'
&& i2c_smbus_read_byte(new_client) == '-') {
dev_info(&new_client->dev, "Vaio EEPROM detected, "
"enabling privacy protection\n");
"enabling password protection\n");
data->nature = VAIO;
}
}
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/i2c/i2c-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -673,7 +673,7 @@ static int __i2c_check_addr(struct i2c_adapter *adapter, unsigned int addr)
return 0;
}

static int i2c_check_addr(struct i2c_adapter *adapter, int addr)
int i2c_check_addr(struct i2c_adapter *adapter, int addr)
{
int rval;

Expand All @@ -683,6 +683,7 @@ static int i2c_check_addr(struct i2c_adapter *adapter, int addr)

return rval;
}
EXPORT_SYMBOL(i2c_check_addr);

int i2c_attach_client(struct i2c_client *client)
{
Expand Down
86 changes: 2 additions & 84 deletions trunk/drivers/i2c/i2c-dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,6 @@

static struct i2c_driver i2cdev_driver;

/*
* An i2c_dev represents an i2c_adapter ... an I2C or SMBus master, not a
* slave (i2c_client) with which messages will be exchanged. It's coupled
* with a character special file which is accessed by user mode drivers.
*
* The list of i2c_dev structures is parallel to the i2c_adapter lists
* maintained by the driver model, and is updated using notifications
* delivered to the i2cdev_driver.
*/
struct i2c_dev {
struct list_head list;
struct i2c_adapter *adap;
Expand Down Expand Up @@ -112,25 +103,6 @@ static ssize_t show_adapter_name(struct device *dev,
}
static DEVICE_ATTR(name, S_IRUGO, show_adapter_name, NULL);

/* ------------------------------------------------------------------------- */

/*
* After opening an instance of this character special file, a file
* descriptor starts out associated only with an i2c_adapter (and bus).
*
* Using the I2C_RDWR ioctl(), you can then *immediately* issue i2c_msg
* traffic to any devices on the bus used by that adapter. That's because
* the i2c_msg vectors embed all the addressing information they need, and
* are submitted directly to an i2c_adapter. However, SMBus-only adapters
* don't support that interface.
*
* To use read()/write() system calls on that file descriptor, or to use
* SMBus interfaces (and work with SMBus-only hosts!), you must first issue
* an I2C_SLAVE (or I2C_SLAVE_FORCE) ioctl. That configures an anonymous
* (never registered) i2c_client so it holds the addressing information
* needed by those system calls and by this SMBus interface.
*/

static ssize_t i2cdev_read (struct file *file, char __user *buf, size_t count,
loff_t *offset)
{
Expand Down Expand Up @@ -182,29 +154,6 @@ static ssize_t i2cdev_write (struct file *file, const char __user *buf, size_t c
return ret;
}

/* This address checking function differs from the one in i2c-core
in that it considers an address with a registered device, but no
bounded driver, as NOT busy. */
static int i2cdev_check_addr(struct i2c_adapter *adapter, unsigned int addr)
{
struct list_head *item;
struct i2c_client *client;
int res = 0;

mutex_lock(&adapter->clist_lock);
list_for_each(item, &adapter->clients) {
client = list_entry(item, struct i2c_client, list);
if (client->addr == addr) {
if (client->driver)
res = -EBUSY;
break;
}
}
mutex_unlock(&adapter->clist_lock);

return res;
}

static int i2cdev_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
Expand All @@ -223,22 +172,11 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
switch ( cmd ) {
case I2C_SLAVE:
case I2C_SLAVE_FORCE:
/* NOTE: devices set up to work with "new style" drivers
* can't use I2C_SLAVE, even when the device node is not
* bound to a driver. Only I2C_SLAVE_FORCE will work.
*
* Setting the PEC flag here won't affect kernel drivers,
* which will be using the i2c_client node registered with
* the driver model core. Likewise, when that client has
* the PEC flag already set, the i2c-dev driver won't see
* (or use) this setting.
*/
if ((arg > 0x3ff) ||
(((client->flags & I2C_M_TEN) == 0) && arg > 0x7f))
return -EINVAL;
if (cmd == I2C_SLAVE && i2cdev_check_addr(client->adapter, arg))
if ((cmd == I2C_SLAVE) && i2c_check_addr(client->adapter,arg))
return -EBUSY;
/* REVISIT: address could become busy later */
client->addr = arg;
return 0;
case I2C_TENBIT:
Expand Down Expand Up @@ -448,13 +386,6 @@ static int i2cdev_open(struct inode *inode, struct file *file)
if (!adap)
return -ENODEV;

/* This creates an anonymous i2c_client, which may later be
* pointed to some address using I2C_SLAVE or I2C_SLAVE_FORCE.
*
* This client is ** NEVER REGISTERED ** with the driver model
* or I2C core code!! It just holds private copies of addressing
* information and maybe a PEC flag.
*/
client = kzalloc(sizeof(*client), GFP_KERNEL);
if (!client) {
i2c_put_adapter(adap);
Expand All @@ -463,6 +394,7 @@ static int i2cdev_open(struct inode *inode, struct file *file)
snprintf(client->name, I2C_NAME_SIZE, "i2c-dev %d", adap->nr);
client->driver = &i2cdev_driver;

/* registered with adapter, passed as client to user */
client->adapter = adap;
file->private_data = client;

Expand Down Expand Up @@ -490,14 +422,6 @@ static const struct file_operations i2cdev_fops = {
.release = i2cdev_release,
};

/* ------------------------------------------------------------------------- */

/*
* The legacy "i2cdev_driver" is used primarily to get notifications when
* I2C adapters are added or removed, so that each one gets an i2c_dev
* and is thus made available to userspace driver code.
*/

static struct class *i2c_dev_class;

static int i2cdev_attach_adapter(struct i2c_adapter *adap)
Expand Down Expand Up @@ -562,12 +486,6 @@ static struct i2c_driver i2cdev_driver = {
.detach_client = i2cdev_detach_client,
};

/* ------------------------------------------------------------------------- */

/*
* module load/unload record keeping
*/

static int __init i2c_dev_init(void)
{
int res;
Expand Down
51 changes: 24 additions & 27 deletions trunk/drivers/net/skge.c
Original file line number Diff line number Diff line change
Expand Up @@ -2512,32 +2512,31 @@ static int skge_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
return err;
}

static void skge_ramset(struct skge_hw *hw, u16 q, u32 start, size_t len)
/* Assign Ram Buffer allocation to queue */
static void skge_ramset(struct skge_hw *hw, u16 q, u32 start, u32 space)
{
u32 end;

start /= 8;
len /= 8;
end = start + len - 1;
/* convert from K bytes to qwords used for hw register */
start *= 1024/8;
space *= 1024/8;
end = start + space - 1;

skge_write8(hw, RB_ADDR(q, RB_CTRL), RB_RST_CLR);
skge_write32(hw, RB_ADDR(q, RB_START), start);
skge_write32(hw, RB_ADDR(q, RB_END), end);
skge_write32(hw, RB_ADDR(q, RB_WP), start);
skge_write32(hw, RB_ADDR(q, RB_RP), start);
skge_write32(hw, RB_ADDR(q, RB_END), end);

if (q == Q_R1 || q == Q_R2) {
u32 tp = space - space/4;

/* Set thresholds on receive queue's */
skge_write32(hw, RB_ADDR(q, RB_RX_UTPP),
start + (2*len)/3);
skge_write32(hw, RB_ADDR(q, RB_RX_LTPP),
start + (len/3));
} else {
/* Enable store & forward on Tx queue's because
* Tx FIFO is only 4K on Genesis and 1K on Yukon
*/
skge_write32(hw, RB_ADDR(q, RB_RX_UTPP), tp);
skge_write32(hw, RB_ADDR(q, RB_RX_LTPP), space/4);
} else if (hw->chip_id != CHIP_ID_GENESIS)
/* Genesis Tx Fifo is too small for normal store/forward */
skge_write8(hw, RB_ADDR(q, RB_CTRL), RB_ENA_STFWD);
}

skge_write8(hw, RB_ADDR(q, RB_CTRL), RB_ENA_OP_MD);
}
Expand Down Expand Up @@ -2565,7 +2564,7 @@ static int skge_up(struct net_device *dev)
struct skge_port *skge = netdev_priv(dev);
struct skge_hw *hw = skge->hw;
int port = skge->port;
u32 chunk, ram_addr;
u32 ramaddr, ramsize, rxspace;
size_t rx_size, tx_size;
int err;

Expand Down Expand Up @@ -2620,14 +2619,15 @@ static int skge_up(struct net_device *dev)
spin_unlock_bh(&hw->phy_lock);

/* Configure RAMbuffers */
chunk = hw->ram_size / ((hw->ports + 1)*2);
ram_addr = hw->ram_offset + 2 * chunk * port;
ramsize = (hw->ram_size - hw->ram_offset) / hw->ports;
ramaddr = hw->ram_offset + port * ramsize;
rxspace = 8 + (2*(ramsize - 16))/3;

skge_ramset(hw, rxqaddr[port], ram_addr, chunk);
skge_qset(skge, rxqaddr[port], skge->rx_ring.to_clean);
skge_ramset(hw, rxqaddr[port], ramaddr, rxspace);
skge_ramset(hw, txqaddr[port], ramaddr + rxspace, ramsize - rxspace);

skge_qset(skge, rxqaddr[port], skge->rx_ring.to_clean);
BUG_ON(skge->tx_ring.to_use != skge->tx_ring.to_clean);
skge_ramset(hw, txqaddr[port], ram_addr+chunk, chunk);
skge_qset(skge, txqaddr[port], skge->tx_ring.to_use);

/* Start receiver BMU */
Expand Down Expand Up @@ -3591,15 +3591,12 @@ static int skge_reset(struct skge_hw *hw)
if (hw->chip_id == CHIP_ID_GENESIS) {
if (t8 == 3) {
/* special case: 4 x 64k x 36, offset = 0x80000 */
hw->ram_size = 0x100000;
hw->ram_offset = 0x80000;
hw->ram_size = 1024;
hw->ram_offset = 512;
} else
hw->ram_size = t8 * 512;
}
else if (t8 == 0)
hw->ram_size = 0x20000;
else
hw->ram_size = t8 * 4096;
} else /* Yukon */
hw->ram_size = t8 ? t8 * 4 : 128;

hw->intr_mask = IS_HW_ERR;

Expand Down
Loading

0 comments on commit e45fbb6

Please sign in to comment.