-#define DEBUG
/*
- * drivers/i2c/chips/menelaus.c
- *
* Copyright (C) 2004 Texas Instruments, Inc.
*
* Some parts based tps65010.c:
#include <linux/sched.h>
#include <linux/mutex.h>
#include <linux/workqueue.h>
+#include <linux/delay.h>
#include <linux/rtc.h>
#include <linux/bcd.h>
#define DRIVER_NAME "menelaus"
-#define pr_err(fmt, arg...) printk(KERN_ERR DRIVER_NAME ": ", ## arg);
-
#define MENELAUS_I2C_ADDRESS 0x72
#define MENELAUS_REV 0x01
int val = i2c_smbus_write_byte_data(the_menelaus->client, reg, value);
if (val < 0) {
- pr_err("write error");
+ dev_err(&the_menelaus->client->dev, "write error");
return val;
}
int val = i2c_smbus_read_byte_data(the_menelaus->client, reg);
if (val < 0)
- pr_err("read error");
+ dev_err(&the_menelaus->client->dev, "read error");
return val;
}
* in each slot. In this case the cards are not seen by menelaus.
* FIXME: Add handling for D1 too
*/
-static void menelaus_mmc_cd_work(struct menelaus_chip * menelaus_hw)
+static void menelaus_mmc_cd_work(struct menelaus_chip *menelaus_hw)
{
int reg;
unsigned char card_mask = 0;
}
EXPORT_SYMBOL(menelaus_set_mmc_slot);
-#include <linux/delay.h>
-
int menelaus_register_mmc_callback(void (*callback)(void *data, u8 card_mask),
void *data)
{
val = ret & ~(((1 << vtg->vtg_bits) - 1) << vtg->vtg_shift);
val |= vtg_val << vtg->vtg_shift;
- dev_dbg(&c->dev, "Setting voltage '%s' to %d mV (reg 0x%02x, val 0x%02x)\n",
- vtg->name, mV, vtg->vtg_reg, val);
+ dev_dbg(&c->dev, "Setting voltage '%s'"
+ "to %d mV (reg 0x%02x, val 0x%02x)\n",
+ vtg->name, mV, vtg->vtg_reg, val);
ret = menelaus_write_reg(vtg->vtg_reg, val);
if (ret < 0)
int val, ret;
struct i2c_client *c = the_menelaus->client;
- val = menelaus_get_vtg_value(mV, vcore_values, ARRAY_SIZE(vcore_values));
+ val = menelaus_get_vtg_value(mV, vcore_values,
+ ARRAY_SIZE(vcore_values));
if (val < 0)
return -EINVAL;
return status;
status = menelaus_write_reg(MENELAUS_RTC_WKDAY, BIN2BCD(t->tm_wday));
if (status < 0) {
- dev_err(&the_menelaus->client->dev, "rtc write reg %02x, err %d\n",
- MENELAUS_RTC_WKDAY, status);
+ dev_err(&the_menelaus->client->dev, "rtc write reg %02x"
+ "err %d\n", MENELAUS_RTC_WKDAY, status);
return status;
}
menelaus->client = client;
/* If a true probe check the device */
- if ((rev = menelaus_read_reg(MENELAUS_REV)) < 0) {
- pr_err("device not found");
+ rev = menelaus_read_reg(MENELAUS_REV);
+ if (rev < 0) {
+ dev_err(&client->dev, "device not found");
err = -ENODEV;
goto fail1;
}
mutex_init(&menelaus->lock);
INIT_WORK(&menelaus->work, menelaus_work);
- pr_info("Menelaus rev %d.%d\n", rev >> 4, rev & 0x0f);
+ dev_info(&client->dev, "Menelaus rev %d.%d\n", rev >> 4, rev & 0x0f);
val = menelaus_read_reg(MENELAUS_VCORE_CTRL1);
if (val < 0)
struct menelaus_chip *menelaus = i2c_get_clientdata(client);
free_irq(client->irq, menelaus);
+ kfree(menelaus);
+ i2c_set_clientdata(client, NULL);
the_menelaus = NULL;
return 0;
}
.driver = {
.name = DRIVER_NAME,
},
- .id = I2C_DRIVERID_MISC, /*FIXME:accroding to i2c-ids.h */
- .class = I2C_CLASS_HWMON,
.probe = menelaus_probe,
.remove = __exit_p(menelaus_remove),
};
{
int res;
- if ((res = i2c_add_driver(&menelaus_i2c_driver)) < 0) {
- pr_err("driver registration failed\n");
+ res = i2c_add_driver(&menelaus_i2c_driver);
+ if (res < 0) {
+ dev_err(&the_menelaus->client->dev, "driver registration failed\n");
return res;
}
/* FIXME: Shutdown menelaus parts that can be shut down */
}
-MODULE_AUTHOR("Texas Instruments, Inc.");
+MODULE_AUTHOR("Texas Instruments, Inc. (and others)");
MODULE_DESCRIPTION("I2C interface for Menelaus.");
MODULE_LICENSE("GPL");