From: Maxim Levitsky <maximlevitsky@gmail.com>
To: lirc-list@lists.sourceforge.net
Cc: Jarod Wilson <jarod@wilsonet.com>,
linux-input@vger.kernel.org, linux-media@vger.kernel.org,
Mauro Carvalho Chehab <mchehab@redhat.com>,
Christoph Bartelmus <lirc@bartelmus.de>,
Maxim Levitsky <maximlevitsky@gmail.com>
Subject: [PATCH 7/7] ENE: add support for carrier reports
Date: Mon, 30 Aug 2010 11:52:27 +0300 [thread overview]
Message-ID: <1283158348-7429-8-git-send-email-maximlevitsky@gmail.com> (raw)
In-Reply-To: <1283158348-7429-1-git-send-email-maximlevitsky@gmail.com>
Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com>
---
drivers/media/IR/ene_ir.c | 47 +++++++++++++++++++++++++++++++++++---------
1 files changed, 37 insertions(+), 10 deletions(-)
diff --git a/drivers/media/IR/ene_ir.c b/drivers/media/IR/ene_ir.c
index c7bbbca..dfb822b 100644
--- a/drivers/media/IR/ene_ir.c
+++ b/drivers/media/IR/ene_ir.c
@@ -224,6 +224,7 @@ void ene_rx_sense_carrier(struct ene_device *dev)
{
int period = ene_read_reg(dev, ENE_CIRCAR_PRD);
int hperiod = ene_read_reg(dev, ENE_CIRCAR_HPRD);
+ struct ir_raw_event ev = ir_new_event;
int carrier, duty_cycle;
@@ -238,19 +239,23 @@ void ene_rx_sense_carrier(struct ene_device *dev)
dbg("RX: hardware carrier period = %02x", period);
dbg("RX: hardware carrier pulse period = %02x", hperiod);
-
carrier = 2000000 / period;
duty_cycle = (hperiod * 100) / period;
dbg("RX: sensed carrier = %d Hz, duty cycle %d%%",
- carrier, duty_cycle);
-
- /* TODO: Send carrier & duty cycle to IR layer */
+ carrier, duty_cycle);
+ if (dev->carrier_detect_enabled) {
+ ev.carrier_report = true;
+ ev.carrier = carrier;
+ ev.duty_cycle = duty_cycle;
+ ir_raw_event_store(dev->idev, &ev);
+ }
}
/* determine which input to use*/
static void ene_rx_set_inputs(struct ene_device *dev)
{
- int learning_mode = dev->learning_enabled;
+ int learning_mode = dev->learning_enabled ||
+ dev->carrier_detect_enabled;
dbg("RX: setup receiver, learning mode = %d", learning_mode);
@@ -281,9 +286,17 @@ static void ene_rx_set_inputs(struct ene_device *dev)
ene_enable_cir_engine(dev, true);
ene_select_rx_input(dev, !dev->hw_use_gpio_0a);
- /* Enable carrier detection & demodulation */
+ /* Enable demodulation */
ene_set_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_CARR_DEMOD);
- ene_set_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_CARR_DETECT);
+
+ /* Enable carrier detect if asked to */
+ if (dev->carrier_detect_enabled || debug)
+ ene_set_reg_mask(dev, ENE_CIRCFG2,
+ ENE_CIRCFG2_CARR_DETECT);
+ else
+ ene_clear_reg_mask(dev, ENE_CIRCFG2,
+ ENE_CIRCFG2_CARR_DETECT);
+
/* disable learning mode */
@@ -726,7 +739,7 @@ static irqreturn_t ene_isr(int irq, void *data)
dbg_verbose("RX interrupt");
- if (dev->carrier_detect_enabled || debug)
+ if (dev->hw_learning_and_tx_capable)
ene_rx_sense_carrier(dev);
/* On hardware that don't support extra buffer we need to trust
@@ -796,7 +809,6 @@ static void ene_setup_settings(struct ene_device *dev)
let user set it with LIRC_SET_REC_CARRIER */
dev->learning_enabled =
(learning_mode && dev->hw_learning_and_tx_capable);
-
}
/* outside interface: called on first open*/
@@ -902,6 +914,21 @@ static int ene_set_learning_mode(void *data, int enable)
return 0;
}
+static int ene_set_carrier_report(void *data, int enable)
+{
+ struct ene_device *dev = (struct ene_device *)data;
+ unsigned long flags;
+
+ if (enable == dev->carrier_detect_enabled)
+ return 0;
+
+ spin_lock_irqsave(&dev->hw_lock, flags);
+ dev->carrier_detect_enabled = enable;
+ ene_rx_set_inputs(dev);
+ spin_unlock_irqrestore(&dev->hw_lock, flags);
+ return 0;
+}
+
/* outside interface: enable or disable idle mode */
static void ene_rx_set_idle(void *data, int idle)
{
@@ -1043,7 +1070,7 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
ir_props->s_tx_carrier = ene_set_tx_carrier;
ir_props->s_tx_duty_cycle = ene_set_tx_duty_cycle;
ir_props->tx_resolution = sample_period * 1000;
- /* ir_props->s_carrier_report = ene_set_carrier_report; */
+ ir_props->s_carrier_report = ene_set_carrier_report;
}
--
1.7.0.4
prev parent reply other threads:[~2010-08-30 8:53 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-30 8:52 Many fixes for in-kernel decoding + ENE driver Maxim Levitsky
2010-08-30 8:52 ` [PATCH 1/7] IR: plug races in handling threads Maxim Levitsky
2010-08-30 8:52 ` [PATCH 2/7] IR: make sure we register input device when it safe to do so Maxim Levitsky
2010-08-30 8:52 ` [PATCH 3/7] IR: fix duty cycle capability Maxim Levitsky
2010-08-30 8:52 ` [PATCH 4/7] IR: fix keys beeing stuck down forever Maxim Levitsky
2010-08-30 8:52 ` [PATCH 5/7] ene_ir: updates Maxim Levitsky
2010-08-30 8:52 ` [PATCH 6/7] IR: extend ir_raw_event and do refactoring Maxim Levitsky
2010-09-02 20:56 ` David Härdeman
2010-09-02 20:56 ` David Härdeman
2010-09-02 21:20 ` Maxim Levitsky
2010-09-02 21:20 ` Maxim Levitsky
2010-09-02 22:32 ` David Härdeman
2010-09-02 22:32 ` David Härdeman
2010-08-30 8:52 ` Maxim Levitsky [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1283158348-7429-8-git-send-email-maximlevitsky@gmail.com \
--to=maximlevitsky@gmail.com \
--cc=jarod@wilsonet.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=lirc-list@lists.sourceforge.net \
--cc=lirc@bartelmus.de \
--cc=mchehab@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.