* [PATCH 0/6] CBUS Third try
@ 2011-02-16 20:01 Felipe Balbi
2011-02-16 20:01 ` [PATCH 1/6] cbus: retu: wdt: save dev in retu_wdt_dev Felipe Balbi
` (6 more replies)
0 siblings, 7 replies; 8+ messages in thread
From: Felipe Balbi @ 2011-02-16 20:01 UTC (permalink / raw)
To: Tony Lindgren; +Cc: Linux OMAP Mailing List, Felipe Balbi
Hi Tony,
here are the fixes for CBUS RETU.
Just one patch added, no other differences. My cbus
branch has been updated for convenience:
git://gitorious.org/usb/usb.git cbus
(I'm starting to think usb.git isn't a good name for that tree)
Felipe Balbi (6):
cbus: retu: wdt: save dev in retu_wdt_dev
cbus: retu: pass the child device pointer to all retu functions
cbus: retu: headset: don't save pdev pointer
cbus: retu: replace EXPORT_SYMBOL with EXPORT_SYMBOL_GPL
cbus: retu: tabify retu initialization
cbus: retu: set pm_power_off to NULL when removing retu
drivers/cbus/retu-headset.c | 35 +++++++++++--------
drivers/cbus/retu-pwrbutton.c | 2 +-
drivers/cbus/retu-rtc.c | 28 ++++++++--------
drivers/cbus/retu-wdt.c | 8 ++--
drivers/cbus/retu.c | 73 ++++++++++++++++++++++++----------------
drivers/cbus/retu.h | 9 +++--
6 files changed, 88 insertions(+), 67 deletions(-)
--
1.7.4.rc2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/6] cbus: retu: wdt: save dev in retu_wdt_dev
2011-02-16 20:01 [PATCH 0/6] CBUS Third try Felipe Balbi
@ 2011-02-16 20:01 ` Felipe Balbi
2011-02-16 20:01 ` [PATCH 2/6] cbus: retu: pass the child device pointer to all retu functions Felipe Balbi
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Felipe Balbi @ 2011-02-16 20:01 UTC (permalink / raw)
To: Tony Lindgren; +Cc: Linux OMAP Mailing List, Felipe Balbi
commit 6b8074b00d90b191227dc875b90b272c51f7d6eb
(cbus: Make retu watchdog behave like a standard
Linux watchdog) introduced struct retu_wdt_dev
with a field to save struct device *dev, but never
got the point of saving the pointer into that
structure.
Fix this very old bug so we can actually start
passing child device pointers to retu read/write
operations.
Signed-off-by: Felipe Balbi <balbi@ti.com>
---
drivers/cbus/retu-wdt.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/cbus/retu-wdt.c b/drivers/cbus/retu-wdt.c
index 423216c..f6ff9ad 100644
--- a/drivers/cbus/retu-wdt.c
+++ b/drivers/cbus/retu-wdt.c
@@ -258,6 +258,7 @@ static int __init retu_wdt_probe(struct platform_device *pdev)
if (!wdev)
return -ENOMEM;
+ wdev->dev = &pdev->dev;
wdev->users = 0;
ret = device_create_file(&pdev->dev, &dev_attr_period);
--
1.7.4.rc2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/6] cbus: retu: pass the child device pointer to all retu functions
2011-02-16 20:01 [PATCH 0/6] CBUS Third try Felipe Balbi
2011-02-16 20:01 ` [PATCH 1/6] cbus: retu: wdt: save dev in retu_wdt_dev Felipe Balbi
@ 2011-02-16 20:01 ` Felipe Balbi
2011-02-16 20:01 ` [PATCH 3/6] cbus: retu: headset: don't save pdev pointer Felipe Balbi
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Felipe Balbi @ 2011-02-16 20:01 UTC (permalink / raw)
To: Tony Lindgren; +Cc: Linux OMAP Mailing List, Felipe Balbi
Throught the child device pointer, we can fetch
our needed struct retu simply by dev_get_drvdata(child->parent)
By using that trick, we can get really close to getting
rid of the global struct retu pointer.
Signed-off-by: Felipe Balbi <balbi@ti.com>
---
drivers/cbus/retu-headset.c | 31 ++++++++++++++++++-------------
drivers/cbus/retu-pwrbutton.c | 2 +-
drivers/cbus/retu-rtc.c | 28 ++++++++++++++--------------
drivers/cbus/retu-wdt.c | 7 +++----
drivers/cbus/retu.c | 37 +++++++++++++++++++++++++++----------
drivers/cbus/retu.h | 9 +++++----
6 files changed, 68 insertions(+), 46 deletions(-)
diff --git a/drivers/cbus/retu-headset.c b/drivers/cbus/retu-headset.c
index acf5cbe7..d0b39a7 100644
--- a/drivers/cbus/retu-headset.c
+++ b/drivers/cbus/retu-headset.c
@@ -48,15 +48,16 @@ struct retu_headset {
int irq;
};
-static void retu_headset_set_bias(int enable)
+static void retu_headset_set_bias(struct retu_headset *hs, int enable)
{
if (enable) {
- retu_set_clear_reg_bits(RETU_REG_AUDTXR,
+ retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_AUDTXR,
(1 << 0) | (1 << 1), 0);
msleep(2);
- retu_set_clear_reg_bits(RETU_REG_AUDTXR, 1 << 3, 0);
+ retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_AUDTXR,
+ 1 << 3, 0);
} else {
- retu_set_clear_reg_bits(RETU_REG_AUDTXR, 0,
+ retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_AUDTXR, 0,
(1 << 0) | (1 << 1) | (1 << 3));
}
}
@@ -66,7 +67,7 @@ static void retu_headset_enable(struct retu_headset *hs)
mutex_lock(&hs->mutex);
if (!hs->bias_enabled) {
hs->bias_enabled = 1;
- retu_headset_set_bias(1);
+ retu_headset_set_bias(hs, 1);
}
mutex_unlock(&hs->mutex);
}
@@ -76,7 +77,7 @@ static void retu_headset_disable(struct retu_headset *hs)
mutex_lock(&hs->mutex);
if (hs->bias_enabled) {
hs->bias_enabled = 0;
- retu_headset_set_bias(0);
+ retu_headset_set_bias(hs, 0);
}
mutex_unlock(&hs->mutex);
}
@@ -86,7 +87,8 @@ static void retu_headset_det_enable(struct retu_headset *hs)
mutex_lock(&hs->mutex);
if (!hs->detection_enabled) {
hs->detection_enabled = 1;
- retu_set_clear_reg_bits(RETU_REG_CC1, (1 << 10) | (1 << 8), 0);
+ retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_CC1,
+ (1 << 10) | (1 << 8), 0);
}
mutex_unlock(&hs->mutex);
}
@@ -104,7 +106,8 @@ static void retu_headset_det_disable(struct retu_headset *hs)
if (hs->pressed)
input_report_key(hs->idev, RETU_HEADSET_KEY, 0);
spin_unlock_irqrestore(&hs->lock, flags);
- retu_set_clear_reg_bits(RETU_REG_CC1, 0, (1 << 10) | (1 << 8));
+ retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_CC1, 0,
+ (1 << 10) | (1 << 8));
}
mutex_unlock(&hs->mutex);
}
@@ -115,7 +118,7 @@ static ssize_t retu_headset_hookdet_show(struct device *dev,
{
int val;
- val = retu_read_adc(RETU_ADC_CHANNEL_HOOKDET);
+ val = retu_read_adc(dev, RETU_ADC_CHANNEL_HOOKDET);
return sprintf(buf, "%d\n", val);
}
@@ -190,7 +193,8 @@ static irqreturn_t retu_headset_hook_interrupt(int irq, void *_hs)
input_report_key(hs->idev, RETU_HEADSET_KEY, 1);
}
spin_unlock_irqrestore(&hs->lock, flags);
- retu_set_clear_reg_bits(RETU_REG_CC1, 0, (1 << 10) | (1 << 8));
+ retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_CC1, 0,
+ (1 << 10) | (1 << 8));
mod_timer(&hs->enable_timer, jiffies + msecs_to_jiffies(50));
return IRQ_HANDLED;
@@ -200,7 +204,8 @@ static void retu_headset_enable_timer(unsigned long arg)
{
struct retu_headset *hs = (struct retu_headset *) arg;
- retu_set_clear_reg_bits(RETU_REG_CC1, (1 << 10) | (1 << 8), 0);
+ retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_CC1,
+ (1 << 10) | (1 << 8), 0);
mod_timer(&hs->detect_timer, jiffies + msecs_to_jiffies(350));
}
@@ -309,7 +314,7 @@ static int retu_headset_suspend(struct platform_device *pdev,
mutex_lock(&hs->mutex);
if (hs->bias_enabled)
- retu_headset_set_bias(0);
+ retu_headset_set_bias(hs, 0);
mutex_unlock(&hs->mutex);
return 0;
@@ -321,7 +326,7 @@ static int retu_headset_resume(struct platform_device *pdev)
mutex_lock(&hs->mutex);
if (hs->bias_enabled)
- retu_headset_set_bias(1);
+ retu_headset_set_bias(hs, 1);
mutex_unlock(&hs->mutex);
return 0;
diff --git a/drivers/cbus/retu-pwrbutton.c b/drivers/cbus/retu-pwrbutton.c
index 77c655d..a5a3069 100644
--- a/drivers/cbus/retu-pwrbutton.c
+++ b/drivers/cbus/retu-pwrbutton.c
@@ -58,7 +58,7 @@ static irqreturn_t retubutton_irq(int irq, void *_pwr)
struct retu_pwrbutton *pwr = _pwr;
int state;
- if (retu_read_reg(RETU_REG_STATUS) & RETU_STATUS_PWRONX)
+ if (retu_read_reg(pwr->dev, RETU_REG_STATUS) & RETU_STATUS_PWRONX)
state = PWRBTN_UP;
else
state = PWRBTN_PRESSED;
diff --git a/drivers/cbus/retu-rtc.c b/drivers/cbus/retu-rtc.c
index 303a4a6..488849c 100644
--- a/drivers/cbus/retu-rtc.c
+++ b/drivers/cbus/retu-rtc.c
@@ -60,16 +60,16 @@ static void retu_rtc_do_reset(struct retu_rtc *rtc)
{
u16 ccr1;
- ccr1 = retu_read_reg(RETU_REG_CC1);
+ ccr1 = retu_read_reg(rtc->dev, RETU_REG_CC1);
/* RTC in reset */
- retu_write_reg(RETU_REG_CC1, ccr1 | 0x0001);
+ retu_write_reg(rtc->dev, RETU_REG_CC1, ccr1 | 0x0001);
/* RTC in normal operating mode */
- retu_write_reg(RETU_REG_CC1, ccr1 & ~0x0001);
+ retu_write_reg(rtc->dev, RETU_REG_CC1, ccr1 & ~0x0001);
/* Disable alarm and RTC WD */
- retu_write_reg(RETU_REG_RTCHMAR, 0x7f3f);
+ retu_write_reg(rtc->dev, RETU_REG_RTCHMAR, 0x7f3f);
/* Set Calibration register to default value */
- retu_write_reg(RETU_REG_RTCCALR, 0x00c0);
+ retu_write_reg(rtc->dev, RETU_REG_RTCCALR, 0x00c0);
rtc->alarm_expired = 0;
}
@@ -80,7 +80,7 @@ static irqreturn_t retu_rtc_interrupt(int irq, void *_rtc)
mutex_lock(&rtc->mutex);
rtc->alarm_expired = 1;
- retu_write_reg(RETU_REG_RTCHMAR, (24 << 8) | 60);
+ retu_write_reg(rtc->dev, RETU_REG_RTCHMAR, (24 << 8) | 60);
mutex_unlock(&rtc->mutex);
return IRQ_HANDLED;
@@ -120,7 +120,7 @@ static int retu_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
mutex_lock(&rtc->mutex);
chmar = ((alm->time.tm_hour & 0x1f) << 8) | (alm->time.tm_min & 0x3f);
- retu_write_reg(RETU_REG_RTCHMAR, chmar);
+ retu_write_reg(rtc->dev, RETU_REG_RTCHMAR, chmar);
mutex_unlock(&rtc->mutex);
@@ -134,7 +134,7 @@ static int retu_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
mutex_lock(&rtc->mutex);
- chmar = retu_read_reg(RETU_REG_RTCHMAR);
+ chmar = retu_read_reg(rtc->dev, RETU_REG_RTCHMAR);
alm->time.tm_hour = (chmar >> 8) & 0x1f;
alm->time.tm_min = chmar & 0x3f;
@@ -156,8 +156,8 @@ static int retu_rtc_set_time(struct device *dev, struct rtc_time *tm)
mutex_lock(&rtc->mutex);
- retu_write_reg(RETU_REG_RTCDSR, dsr);
- retu_write_reg(RETU_REG_RTCHMR, hmr);
+ retu_write_reg(rtc->dev, RETU_REG_RTCDSR, dsr);
+ retu_write_reg(rtc->dev, RETU_REG_RTCHMR, hmr);
mutex_unlock(&rtc->mutex);
@@ -179,8 +179,8 @@ static int retu_rtc_read_time(struct device *dev, struct rtc_time *tm)
mutex_lock(&rtc->mutex);
- dsr = retu_read_reg(RETU_REG_RTCDSR);
- hmr = retu_read_reg(RETU_REG_RTCHMR);
+ dsr = retu_read_reg(rtc->dev, RETU_REG_RTCDSR);
+ hmr = retu_read_reg(rtc->dev, RETU_REG_RTCHMR);
tm->tm_sec = hmr & 0xff;
tm->tm_min = hmr >> 8;
@@ -215,7 +215,7 @@ static int __init retu_rtc_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, rtc);
mutex_init(&rtc->mutex);
- rtc->alarm_expired = retu_read_reg(RETU_REG_IDR) &
+ rtc->alarm_expired = retu_read_reg(rtc->dev, RETU_REG_IDR) &
(0x1 << RETU_INT_RTCA);
r = retu_rtc_init_irq(rtc);
@@ -225,7 +225,7 @@ static int __init retu_rtc_probe(struct platform_device *pdev)
}
/* If the calibration register is zero, we've probably lost power */
- if (!(retu_read_reg(RETU_REG_RTCCALR) & 0x00ff))
+ if (!(retu_read_reg(rtc->dev, RETU_REG_RTCCALR) & 0x00ff))
retu_rtc_do_reset(rtc);
rtc->rtc = rtc_device_register(pdev->name, &pdev->dev, &
diff --git a/drivers/cbus/retu-wdt.c b/drivers/cbus/retu-wdt.c
index f6ff9ad..58449e3 100644
--- a/drivers/cbus/retu-wdt.c
+++ b/drivers/cbus/retu-wdt.c
@@ -67,7 +67,8 @@ static void retu_wdt_set_ping_timer(unsigned long enable);
static int _retu_modify_counter(unsigned int new)
{
- retu_write_reg(RETU_REG_WATCHDOG, (u16)new);
+ if (retu_wdt)
+ retu_write_reg(retu_wdt->dev, RETU_REG_WATCHDOG, (u16)new);
return 0;
}
@@ -125,7 +126,7 @@ static ssize_t retu_wdt_counter_show(struct device *dev,
u16 counter;
/* Show current value in watchdog counter */
- counter = retu_read_reg(RETU_REG_WATCHDOG);
+ counter = retu_read_reg(dev, RETU_REG_WATCHDOG);
/* Only the 5 LSB are important */
return snprintf(buf, PAGE_SIZE, "%u\n", (counter & 0x3F));
@@ -228,8 +229,6 @@ static long retu_wdt_ioctl(struct file *file, unsigned int cmd,
/* Start kicking retu watchdog until user space starts doing the kicking */
static int __devinit retu_wdt_ping(void)
{
- int r;
-
#ifdef CONFIG_WATCHDOG_NOWAYOUT
retu_modify_counter(RETU_WDT_MAX_TIMER);
#else
diff --git a/drivers/cbus/retu.c b/drivers/cbus/retu.c
index c798b58..af4d96a 100644
--- a/drivers/cbus/retu.c
+++ b/drivers/cbus/retu.c
@@ -95,34 +95,46 @@ static void __retu_write_reg(struct retu *retu, unsigned reg, u16 val)
/**
* retu_read_reg - Read a value from a register in Retu
+ * @child: device pointer for the calling child
* @reg: the register to read from
*
* This function returns the contents of the specified register
*/
-int retu_read_reg(unsigned reg)
+int retu_read_reg(struct device *child, unsigned reg)
{
- WARN(!the_retu, "Retu not initialized\n");
- return __retu_read_reg(the_retu, reg);
+ struct retu *retu = dev_get_drvdata(child->parent);
+
+ return __retu_read_reg(retu, reg);
}
EXPORT_SYMBOL(retu_read_reg);
/**
* retu_write_reg - Write a value to a register in Retu
+ * @child: the pointer to our calling child
* @reg: the register to write to
* @val: the value to write to the register
*
* This function writes a value to the specified register
*/
-void retu_write_reg(unsigned reg, u16 val)
+void retu_write_reg(struct device *child, unsigned reg, u16 val)
{
- WARN(!the_retu, "Retu not initialized\n");
- __retu_write_reg(the_retu, reg, val);
+ struct retu *retu = dev_get_drvdata(child->parent);
+
+ __retu_write_reg(retu, reg, val);
}
EXPORT_SYMBOL(retu_write_reg);
-void retu_set_clear_reg_bits(unsigned reg, u16 set, u16 clear)
+/**
+ * retu_set_clear_reg_bits - helper function to read/set/clear bits
+ * @child: device pointer to calling child
+ * @reg: the register address
+ * @set: mask for setting bits
+ * @clear: mask for clearing bits
+ */
+void retu_set_clear_reg_bits(struct device *child, unsigned reg, u16 set,
+ u16 clear)
{
- struct retu *retu = the_retu;
+ struct retu *retu = dev_get_drvdata(child->parent);
u16 w;
mutex_lock(&retu->mutex);
@@ -136,9 +148,14 @@ EXPORT_SYMBOL_GPL(retu_set_clear_reg_bits);
#define ADC_MAX_CHAN_NUMBER 13
-int retu_read_adc(int channel)
+/**
+ * retu_read_adc - Reads AD conversion result
+ * @child: device pointer to calling child
+ * @channel: the ADC channel to read from
+ */
+int retu_read_adc(struct device *child, int channel)
{
- struct retu *retu = the_retu;
+ struct retu *retu = dev_get_drvdata(child->parent);
int res;
if (!retu)
diff --git a/drivers/cbus/retu.h b/drivers/cbus/retu.h
index f2357a9..9880f2e 100644
--- a/drivers/cbus/retu.h
+++ b/drivers/cbus/retu.h
@@ -57,9 +57,10 @@
#define MAX_RETU_IRQ_HANDLERS 16
-int retu_read_reg(unsigned reg);
-void retu_write_reg(unsigned reg, u16 val);
-void retu_set_clear_reg_bits(unsigned reg, u16 set, u16 clear);
-int retu_read_adc(int channel);
+int retu_read_reg(struct device *child, unsigned reg);
+void retu_write_reg(struct device *child, unsigned reg, u16 val);
+void retu_set_clear_reg_bits(struct device *child, unsigned reg, u16 set,
+ u16 clear);
+int retu_read_adc(struct device *child, int channel);
#endif /* __DRIVERS_CBUS_RETU_H */
--
1.7.4.rc2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/6] cbus: retu: headset: don't save pdev pointer
2011-02-16 20:01 [PATCH 0/6] CBUS Third try Felipe Balbi
2011-02-16 20:01 ` [PATCH 1/6] cbus: retu: wdt: save dev in retu_wdt_dev Felipe Balbi
2011-02-16 20:01 ` [PATCH 2/6] cbus: retu: pass the child device pointer to all retu functions Felipe Balbi
@ 2011-02-16 20:01 ` Felipe Balbi
2011-02-16 20:01 ` [PATCH 4/6] cbus: retu: replace EXPORT_SYMBOL with EXPORT_SYMBOL_GPL Felipe Balbi
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Felipe Balbi @ 2011-02-16 20:01 UTC (permalink / raw)
To: Tony Lindgren; +Cc: Linux OMAP Mailing List, Felipe Balbi
... and save instead a device pointer. Generally
we only need a device pointer as we don't need
to poke with the platform_device that often and
if we do, we can always to_platform_device(dev).
Drop the pdev from the headset structure and
save dev instead.
Signed-off-by: Felipe Balbi <balbi@ti.com>
---
drivers/cbus/retu-headset.c | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/cbus/retu-headset.c b/drivers/cbus/retu-headset.c
index d0b39a7..3b8e138 100644
--- a/drivers/cbus/retu-headset.c
+++ b/drivers/cbus/retu-headset.c
@@ -38,7 +38,7 @@
struct retu_headset {
spinlock_t lock;
struct mutex mutex;
- struct platform_device *pdev;
+ struct device *dev;
struct input_dev *idev;
unsigned bias_enabled;
unsigned detection_enabled;
@@ -51,13 +51,13 @@ struct retu_headset {
static void retu_headset_set_bias(struct retu_headset *hs, int enable)
{
if (enable) {
- retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_AUDTXR,
+ retu_set_clear_reg_bits(hs->dev, RETU_REG_AUDTXR,
(1 << 0) | (1 << 1), 0);
msleep(2);
- retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_AUDTXR,
+ retu_set_clear_reg_bits(hs->dev, RETU_REG_AUDTXR,
1 << 3, 0);
} else {
- retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_AUDTXR, 0,
+ retu_set_clear_reg_bits(hs->dev, RETU_REG_AUDTXR, 0,
(1 << 0) | (1 << 1) | (1 << 3));
}
}
@@ -87,7 +87,7 @@ static void retu_headset_det_enable(struct retu_headset *hs)
mutex_lock(&hs->mutex);
if (!hs->detection_enabled) {
hs->detection_enabled = 1;
- retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_CC1,
+ retu_set_clear_reg_bits(hs->dev, RETU_REG_CC1,
(1 << 10) | (1 << 8), 0);
}
mutex_unlock(&hs->mutex);
@@ -106,7 +106,7 @@ static void retu_headset_det_disable(struct retu_headset *hs)
if (hs->pressed)
input_report_key(hs->idev, RETU_HEADSET_KEY, 0);
spin_unlock_irqrestore(&hs->lock, flags);
- retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_CC1, 0,
+ retu_set_clear_reg_bits(hs->dev, RETU_REG_CC1, 0,
(1 << 10) | (1 << 8));
}
mutex_unlock(&hs->mutex);
@@ -193,7 +193,7 @@ static irqreturn_t retu_headset_hook_interrupt(int irq, void *_hs)
input_report_key(hs->idev, RETU_HEADSET_KEY, 1);
}
spin_unlock_irqrestore(&hs->lock, flags);
- retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_CC1, 0,
+ retu_set_clear_reg_bits(hs->dev, RETU_REG_CC1, 0,
(1 << 10) | (1 << 8));
mod_timer(&hs->enable_timer, jiffies + msecs_to_jiffies(50));
@@ -204,7 +204,7 @@ static void retu_headset_enable_timer(unsigned long arg)
{
struct retu_headset *hs = (struct retu_headset *) arg;
- retu_set_clear_reg_bits(&hs->pdev->dev, RETU_REG_CC1,
+ retu_set_clear_reg_bits(hs->dev, RETU_REG_CC1,
(1 << 10) | (1 << 8), 0);
mod_timer(&hs->detect_timer, jiffies + msecs_to_jiffies(350));
}
@@ -232,7 +232,7 @@ static int __init retu_headset_probe(struct platform_device *pdev)
if (hs == NULL)
return -ENOMEM;
- hs->pdev = pdev;
+ hs->dev = &pdev->dev;
hs->idev = input_allocate_device();
if (hs->idev == NULL) {
--
1.7.4.rc2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/6] cbus: retu: replace EXPORT_SYMBOL with EXPORT_SYMBOL_GPL
2011-02-16 20:01 [PATCH 0/6] CBUS Third try Felipe Balbi
` (2 preceding siblings ...)
2011-02-16 20:01 ` [PATCH 3/6] cbus: retu: headset: don't save pdev pointer Felipe Balbi
@ 2011-02-16 20:01 ` Felipe Balbi
2011-02-16 20:01 ` [PATCH 5/6 v2] cbus: retu: tabify retu initialization Felipe Balbi
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Felipe Balbi @ 2011-02-16 20:01 UTC (permalink / raw)
To: Tony Lindgren; +Cc: Linux OMAP Mailing List, Felipe Balbi
We don't want non-GPL retu children, so force
all exported symbols to be GPL-only.
Signed-off-by: Felipe Balbi <balbi@ti.com>
---
drivers/cbus/retu.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/cbus/retu.c b/drivers/cbus/retu.c
index af4d96a..4c8a7ea 100644
--- a/drivers/cbus/retu.c
+++ b/drivers/cbus/retu.c
@@ -106,7 +106,7 @@ int retu_read_reg(struct device *child, unsigned reg)
return __retu_read_reg(retu, reg);
}
-EXPORT_SYMBOL(retu_read_reg);
+EXPORT_SYMBOL_GPL(retu_read_reg);
/**
* retu_write_reg - Write a value to a register in Retu
@@ -122,7 +122,7 @@ void retu_write_reg(struct device *child, unsigned reg, u16 val)
__retu_write_reg(retu, reg, val);
}
-EXPORT_SYMBOL(retu_write_reg);
+EXPORT_SYMBOL_GPL(retu_write_reg);
/**
* retu_set_clear_reg_bits - helper function to read/set/clear bits
@@ -185,7 +185,7 @@ int retu_read_adc(struct device *child, int channel)
return res;
}
-EXPORT_SYMBOL(retu_read_adc);
+EXPORT_SYMBOL_GPL(retu_read_adc);
static irqreturn_t retu_irq_handler(int irq, void *_retu)
{
--
1.7.4.rc2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 5/6 v2] cbus: retu: tabify retu initialization
2011-02-16 20:01 [PATCH 0/6] CBUS Third try Felipe Balbi
` (3 preceding siblings ...)
2011-02-16 20:01 ` [PATCH 4/6] cbus: retu: replace EXPORT_SYMBOL with EXPORT_SYMBOL_GPL Felipe Balbi
@ 2011-02-16 20:01 ` Felipe Balbi
2011-02-16 20:01 ` [PATCH 6/6 v2] cbus: retu: set pm_power_off to NULL when removing retu Felipe Balbi
2011-02-17 0:33 ` [PATCH 0/6] CBUS Third try Tony Lindgren
6 siblings, 0 replies; 8+ messages in thread
From: Felipe Balbi @ 2011-02-16 20:01 UTC (permalink / raw)
To: Tony Lindgren; +Cc: Linux OMAP Mailing List, Felipe Balbi
and while at that, save a register and drop
the irq variable which is used right before
initializing it to retu->irq.
Signed-off-by: Felipe Balbi <balbi@ti.com>
---
drivers/cbus/retu.c | 27 +++++++++++----------------
1 files changed, 11 insertions(+), 16 deletions(-)
diff --git a/drivers/cbus/retu.c b/drivers/cbus/retu.c
index 4c8a7ea..a4c565b 100644
--- a/drivers/cbus/retu.c
+++ b/drivers/cbus/retu.c
@@ -438,7 +438,6 @@ static int __init retu_probe(struct platform_device *pdev)
int ret = -ENOMEM;
int rev;
- int irq;
retu = kzalloc(sizeof(*retu), GFP_KERNEL);
if (!retu) {
@@ -447,16 +446,14 @@ static int __init retu_probe(struct platform_device *pdev)
}
platform_set_drvdata(pdev, retu);
- the_retu = retu;
- mutex_init(&retu->mutex);
-
- irq = platform_get_irq(pdev, 0);
+ retu->irq = platform_get_irq(pdev, 0);
+ retu->irq_base = pdata->irq_base;
+ retu->irq_end = pdata->irq_end;
+ retu->devid = pdata->devid;
+ the_retu = retu;
- retu->irq = irq;
- retu->irq_base = pdata->irq_base;
- retu->irq_end = pdata->irq_end;
- retu->devid = pdata->devid;
+ mutex_init(&retu->mutex);
retu_irq_init(retu);
@@ -471,14 +468,14 @@ static int __init retu_probe(struct platform_device *pdev)
/* Mask all RETU interrupts */
__retu_write_reg(retu, RETU_REG_IMR, 0xffff);
- ret = request_threaded_irq(irq, NULL, retu_irq_handler, 0,
+ ret = request_threaded_irq(retu->irq, NULL, retu_irq_handler, 0,
"retu", retu);
if (ret < 0) {
dev_err(&pdev->dev, "Unable to register IRQ handler\n");
goto err1;
}
- set_irq_wake(irq, 1);
+ set_irq_wake(retu->irq, 1);
/* Register power off function */
pm_power_off = retu_power_off;
@@ -493,7 +490,7 @@ static int __init retu_probe(struct platform_device *pdev)
err2:
__retu_write_reg(retu, RETU_REG_IMR, 0xffff);
- free_irq(irq, retu);
+ free_irq(retu->irq, retu);
err1:
kfree(retu);
@@ -506,13 +503,11 @@ err0:
static int __exit retu_remove(struct platform_device *pdev)
{
struct retu *retu = platform_get_drvdata(pdev);
- int irq;
-
- irq = platform_get_irq(pdev, 0);
/* Mask all RETU interrupts */
__retu_write_reg(retu, RETU_REG_IMR, 0xffff);
- free_irq(irq, retu);
+
+ free_irq(retu->irq, retu);
retu_irq_exit(retu);
kfree(retu);
the_retu = NULL;
--
1.7.4.rc2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 6/6 v2] cbus: retu: set pm_power_off to NULL when removing retu
2011-02-16 20:01 [PATCH 0/6] CBUS Third try Felipe Balbi
` (4 preceding siblings ...)
2011-02-16 20:01 ` [PATCH 5/6 v2] cbus: retu: tabify retu initialization Felipe Balbi
@ 2011-02-16 20:01 ` Felipe Balbi
2011-02-17 0:33 ` [PATCH 0/6] CBUS Third try Tony Lindgren
6 siblings, 0 replies; 8+ messages in thread
From: Felipe Balbi @ 2011-02-16 20:01 UTC (permalink / raw)
To: Tony Lindgren; +Cc: Linux OMAP Mailing List, Felipe Balbi
we need to clear pm_power_off otherwise we
will have kernel trying to call an unexistent
function.
Signed-off-by: Felipe Balbi <balbi@ti.com>
---
drivers/cbus/retu.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/drivers/cbus/retu.c b/drivers/cbus/retu.c
index a4c565b..0ca58b7 100644
--- a/drivers/cbus/retu.c
+++ b/drivers/cbus/retu.c
@@ -489,6 +489,7 @@ static int __init retu_probe(struct platform_device *pdev)
return 0;
err2:
+ pm_power_off = NULL;
__retu_write_reg(retu, RETU_REG_IMR, 0xffff);
free_irq(retu->irq, retu);
@@ -504,13 +505,15 @@ static int __exit retu_remove(struct platform_device *pdev)
{
struct retu *retu = platform_get_drvdata(pdev);
+ pm_power_off = NULL;
+ the_retu = NULL;
+
/* Mask all RETU interrupts */
__retu_write_reg(retu, RETU_REG_IMR, 0xffff);
free_irq(retu->irq, retu);
retu_irq_exit(retu);
kfree(retu);
- the_retu = NULL;
return 0;
}
--
1.7.4.rc2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 0/6] CBUS Third try
2011-02-16 20:01 [PATCH 0/6] CBUS Third try Felipe Balbi
` (5 preceding siblings ...)
2011-02-16 20:01 ` [PATCH 6/6 v2] cbus: retu: set pm_power_off to NULL when removing retu Felipe Balbi
@ 2011-02-17 0:33 ` Tony Lindgren
6 siblings, 0 replies; 8+ messages in thread
From: Tony Lindgren @ 2011-02-17 0:33 UTC (permalink / raw)
To: Felipe Balbi; +Cc: Linux OMAP Mailing List
* Felipe Balbi <balbi@ti.com> [110216 11:59]:
> Hi Tony,
>
> here are the fixes for CBUS RETU.
>
> Just one patch added, no other differences. My cbus
> branch has been updated for convenience:
>
> git://gitorious.org/usb/usb.git cbus
>
> (I'm starting to think usb.git isn't a good name for that tree)
I guess that does not matter :) Seems to boot now, pulling them in.
Tony
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-02-17 0:34 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-02-16 20:01 [PATCH 0/6] CBUS Third try Felipe Balbi
2011-02-16 20:01 ` [PATCH 1/6] cbus: retu: wdt: save dev in retu_wdt_dev Felipe Balbi
2011-02-16 20:01 ` [PATCH 2/6] cbus: retu: pass the child device pointer to all retu functions Felipe Balbi
2011-02-16 20:01 ` [PATCH 3/6] cbus: retu: headset: don't save pdev pointer Felipe Balbi
2011-02-16 20:01 ` [PATCH 4/6] cbus: retu: replace EXPORT_SYMBOL with EXPORT_SYMBOL_GPL Felipe Balbi
2011-02-16 20:01 ` [PATCH 5/6 v2] cbus: retu: tabify retu initialization Felipe Balbi
2011-02-16 20:01 ` [PATCH 6/6 v2] cbus: retu: set pm_power_off to NULL when removing retu Felipe Balbi
2011-02-17 0:33 ` [PATCH 0/6] CBUS Third try Tony Lindgren
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.