Re: RFC: A better clock rounding API?

2010-08-17 Thread Saravana Kannan
Btw, if we are going to pass a rate range from the driver, we might as 
well make it clk_set_rate_range(). By passing the range, we rule out the 
possibility of any catastrophic rates -- so clk_find_rate() seems less 
useful.


Thanks,
Sarav
P.S: murphy++;
Found a correction just after I sent the email but not on any of the 
several iterations of proof reading that preceded it.



Saravana Kannan wrote:
I'm mostly familiar with ARM.  So I will limit the discussion to ARM 
boards/machines.  But I think the points raised in this email would 
apply for most architectures.


I'm sending this to the ARM mailing list first to see if I can get a 
consensus within the ARM community before I propose this to the wider 
audience in LKML.


The meaning of clk_round_rate() is very ambiguous since the nature of 
the rounding is architecture and platform specific.  In the case of ARM, 
it's up to each ARM mach's clock driver to determine how it wants to 
round the rate.


To quote Russel King from an email about a month ago:
"clk_round_rate() returns the clock rate which will be set if you ask
clk_set_rate() to set that rate.  It provides a way to query from the 
implementation exactly what rate you'll get if you use clk_set_rate() 
with that same argument."


So when someone writes a device driver for a device that's external to 
the SoC or is integrated into more than one SoC, they currently have the 
following options to deal with clock rates differences:


1. Use clk_round_rate() to get clock rates and test their driver on the 
one/few board(s) they have at hand and hope it works on boards using 
different SoCs.


2. Add each and every needed clock rate (low power rate, high 
performance rate, handshake rate, etc) as fields to their platform data 
and have it populated in every board file that uses the device.


3. Do a search of the frequency space of the clock by making several 
clk_round_rate() calls at various intervals between their minimum and 
maximum acceptable rates and hope to find one of the supported rates. 
If clk_round_rate() does a +/- N percentage rounding and the interval is 
larger, even this searching might not find an existing rate that's 
supported between the driver's min and max acceptable rates.


IMHO, each of these options have short comings that could be alleviated 
by adding a more definitive "rounding" API.  Also, considering that it's 
the consumer of each clock that knows best what amount of rounding and 
in which direction is acceptable, IMHO the current approach of hiding 
the rounding inside the clock drivers seems counter intuitive.


I would like to propose the addition of either:

long clk_find_rate(struct clk *clk,
unsigned long min_rate,
long max_rate);

or

long clk_find_rate(struct clk *clk,
unsigned long start_rate,
long end_rate);

The advantage of the 2nd suggestion is that it allows a driver to 
specify which end of a frequency range it prefers.  But I'm not sure how 
important of an advantage that is.  So, proposing both and having the 
community decide which one, if any, is acceptable.


If the clk_find_rate() API is available, the driver developer wouldn't 
have to worry about figuring out a way for the clk_set_rate() to work on 
different platforms/machs/SoCs. If a platform/mach/SoC can provide a 
clock rate that's acceptable to their hardware and software 
requirements, then they can be assured to find it without having to jump 
through hoops or having a driver not work when it could have.


Does the addition of one of the suggested APIs sound reasonable? If not, 
can someone explain what the right/better solution is? If the addition 
of a new API is reasonable, what's the community preference between the 
two suggestion? If I submit a patch that will add one of the APIs is it 
likely to be accepted?


Thanks for your time.

-Sarav




--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RFC: A better clock rounding API?

2010-08-17 Thread Saravana Kannan
I'm mostly familiar with ARM.  So I will limit the discussion to ARM 
boards/machines.  But I think the points raised in this email would 
apply for most architectures.


I'm sending this to the ARM mailing list first to see if I can get a 
consensus within the ARM community before I propose this to the wider 
audience in LKML.


The meaning of clk_round_rate() is very ambiguous since the nature of 
the rounding is architecture and platform specific.  In the case of ARM, 
it's up to each ARM mach's clock driver to determine how it wants to 
round the rate.


To quote Russel King from an email about a month ago:
"clk_round_rate() returns the clock rate which will be set if you ask
clk_set_rate() to set that rate.  It provides a way to query from the 
implementation exactly what rate you'll get if you use clk_set_rate() 
with that same argument."


So when someone writes a device driver for a device that's external to 
the SoC or is integrated into more than one SoC, they currently have the 
following options to deal with clock rates differences:


1. Use clk_round_rate() to get clock rates and test their driver on the 
one/few board(s) they have at hand and hope it works on boards using 
different SoCs.


2. Add each and every needed clock rate (low power rate, high 
performance rate, handshake rate, etc) as fields to their platform data 
and have it populated in every board file that uses the device.


3. Do a search of the frequency space of the clock by making several 
clk_round_rate() calls at various intervals between their minimum and 
maximum acceptable rates and hope to find one of the supported rates. 
If clk_round_rate() does a +/- N percentage rounding and the interval is 
larger, even this searching might not find an existing rate that's 
supported between the driver's min and max acceptable rates.


IMHO, each of these options have short comings that could be alleviated 
by adding a more definitive "rounding" API.  Also, considering that it's 
the consumer of each clock that knows best what amount of rounding and 
in which direction is acceptable, IMHO the current approach of hiding 
the rounding inside the clock drivers seems counter intuitive.


I would like to propose the addition of either:

long clk_find_rate(struct clk *clk,
unsigned long min_rate,
long max_rate);

or

long clk_find_rate(struct clk *clk,
unsigned long start_rate,
long end_rate);

The advantage of the 2nd suggestion is that it allows a driver to 
specify which end of a frequency range it prefers.  But I'm not sure how 
important of an advantage that is.  So, proposing both and having the 
community decide which one, if any, is acceptable.


If the clk_find_rate() API is available, the driver developer wouldn't 
have to worry about figuring out a way for the clk_set_rate() to work on 
different platforms/machs/SoCs. If a platform/mach/SoC can provide a 
clock rate that's acceptable to their hardware and software 
requirements, then they can be assured to find it without having to jump 
through hoops or having a driver not work when it could have.


Does the addition of one of the suggested APIs sound reasonable? If not, 
can someone explain what the right/better solution is? If the addition 
of a new API is reasonable, what's the community preference between the 
two suggestion? If I submit a patch that will add one of the APIs is it 
likely to be accepted?


Thanks for your time.

-Sarav

--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/1] Bluetooth: Add socket option definitions for AMP

2010-08-17 Thread Mat Martineau
This adds a new BT_AMP socket option to control the use of AMP channels.
It is for use with the SOL_BLUETOOTH option level on L2CAP sockets.

Available option values are defined as:

BT_AMP_REQUIRE_BR_EDR
 * Default
 * AMP controllers cannot be used
 * Channel move requests from the remote device are denied
 * If the L2CAP channel is currently using AMP, move the channel to
   BR/EDR

BT_AMP_PREFER_AMP
 * Allow use of AMP controllers
 * If the L2CAP channel is currently on BR/EDR and AMP controller
   resources are available, initiate a channel move to AMP
 * Channel move requests from the remote device are allowed
 * If the L2CAP socket has not been connected yet, try to create
   and configure the channel directly on an AMP controller rather
   than BR/EDR

BT_AMP_PREFER_BR_EDR
 * Allow use of AMP controllers
 * If the L2CAP channel is currently on AMP, move it to BR/EDR
 * Channel move requests from the remote device are allowed

Signed-off-by: Mat Martineau 
---
 include/net/bluetooth/bluetooth.h |5 +
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/include/net/bluetooth/bluetooth.h 
b/include/net/bluetooth/bluetooth.h
index 27a902d..0d41b99 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -64,6 +64,11 @@ struct bt_security {
 
 #define BT_DEFER_SETUP 7
 
+#define BT_AMP 8
+#define BT_AMP_REQUIRE_BR_EDR  0
+#define BT_AMP_PREFER_AMP  1
+#define BT_AMP_PREFER_BR_EDR   2
+
 #define BT_INFO(fmt, arg...) printk(KERN_INFO "Bluetooth: " fmt "\n" , ## arg)
 #define BT_ERR(fmt, arg...)  printk(KERN_ERR "%s: " fmt "\n" , __func__ , ## 
arg)
 #define BT_DBG(fmt, arg...)  pr_debug("%s: " fmt "\n" , __func__ , ## arg)
-- 
1.7.1

--
Mat Martineau
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: regulator voltage aggregation

2010-08-17 Thread Mark Brown
On Tue, Aug 17, 2010 at 01:44:36PM -0700, Bobby Crabtree wrote:

> Only remaining question I have is if the aggregation of
> multiple consumer constraints should be the default (and only)
> behavior. Or should we introduce a new flag to the
> regulator_constraints structure that tells the core to aggregate
> consumer voltages constraints?

I'd say make it the only behaviour - if there is only one consumer it
decays into the same behaviour as we have currently, and since voltage
changes need to be explicitly enabled by the machine constraints it
should not affect any existing machines.

One thing to take account of is an attempt to set a constraint which
can't be accomodated by the other enabled devices, or enable a device
which has constraints outside the currently allowed range.
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: regulator voltage aggregation

2010-08-17 Thread Bobby Crabtree
Mark Brown wrote:
> On Tue, Aug 17, 2010 at 12:33:33PM -0700, Bobby Crabtree wrote:
>> Mark Brown wrote:
> 
>>> It's unlikely that the highest voltage would ever be the best choice...
> 
>> We do need the highest voltage. Let's say we have two consumers
>> (A and B). Both require 1.3V for "normal" operations. Then let's
>> say that consumer A can save power by reducing the voltage to 1.1V
>> (but it doesn't require 1.1V). If the core were to immediately apply
>> 1.1V, then the 1.3V requirement of consumer B would not be satisfied.
> 
> That's not the highest voltage, that's the minimum voltage that
> satisfies all the requests that the consumers have made.  The consumer
> which requires 1.1V will have requested 1.1V up to, say, 3.3V.  The
> consumer that requested 1.3V will have requested, say, 1.3-1.8V and
> let's say the machine constraints will allow at least these ranges.
> 1.3V is the lowest voltage that hits all the constraints, but it's still
> lower than any of the maxima.
> 
Aah. I get it now.

>>> This was actually a feature of the regulator API when originally
>>> proposed, it got dropped for ease of review but there's some remanants
>>> of this in the code so it shouldn't be hard to resurrect.  Whenever a
>>> voltage was set the code stored the range on the consumer then iterated
>>> over all consumers applying their ranges plus the machine constraints
>>> rather than just using the immediate value.
> 
>> I noticed some of the remnants. But I'm not sure I follow what you
>> are saying. What range would the core actually propagate to the
>> driver? The minimum min_uV and the maximum max_uV? We need the core
>> to propagate the maximum min_uV and the maximum max_uV.
> 
> No, it'd be the maximum min_uV and the minimum max_uV - this is already
> happening when the constraints from the machine are applied, it'd just
> be applying a wider set of constraints.  In principle all we need to do
> is remember the voltage constraints that individual consumers set and
> then iterate over all the enabled consumers when one of them changes its
> range (or is enabled/disabled) instead of just taking the immediate
> values from the consumer.

Got it.

Only remaining question I have is if the aggregation of
multiple consumer constraints should be the default (and only)
behavior. Or should we introduce a new flag to the
regulator_constraints structure that tells the core to aggregate
consumer voltages constraints?
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: regulator voltage aggregation

2010-08-17 Thread Mark Brown
On Tue, Aug 17, 2010 at 12:33:33PM -0700, Bobby Crabtree wrote:
> Mark Brown wrote:

> > It's unlikely that the highest voltage would ever be the best choice...

> We do need the highest voltage. Let's say we have two consumers
> (A and B). Both require 1.3V for "normal" operations. Then let's
> say that consumer A can save power by reducing the voltage to 1.1V
> (but it doesn't require 1.1V). If the core were to immediately apply
> 1.1V, then the 1.3V requirement of consumer B would not be satisfied.

That's not the highest voltage, that's the minimum voltage that
satisfies all the requests that the consumers have made.  The consumer
which requires 1.1V will have requested 1.1V up to, say, 3.3V.  The
consumer that requested 1.3V will have requested, say, 1.3-1.8V and
let's say the machine constraints will allow at least these ranges.
1.3V is the lowest voltage that hits all the constraints, but it's still
lower than any of the maxima.  When you've got multiple things
specifying a voltage constraint you need to apply the most restrictive
combination of constraints but it still makes sense to pick the minimum
voltage we can deliver from the range that's left after doing that.

> > This was actually a feature of the regulator API when originally
> > proposed, it got dropped for ease of review but there's some remanants
> > of this in the code so it shouldn't be hard to resurrect.  Whenever a
> > voltage was set the code stored the range on the consumer then iterated
> > over all consumers applying their ranges plus the machine constraints
> > rather than just using the immediate value.

> I noticed some of the remnants. But I'm not sure I follow what you
> are saying. What range would the core actually propagate to the
> driver? The minimum min_uV and the maximum max_uV? We need the core
> to propagate the maximum min_uV and the maximum max_uV.

No, it'd be the maximum min_uV and the minimum max_uV - this is already
happening when the constraints from the machine are applied, it'd just
be applying a wider set of constraints.  In principle all we need to do
is remember the voltage constraints that individual consumers set and
then iterate over all the enabled consumers when one of them changes its
range (or is enabled/disabled) instead of just taking the immediate
values from the consumer.
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: regulator voltage aggregation

2010-08-17 Thread Bobby Crabtree
Mark Brown wrote:
> On Tue, Aug 17, 2010 at 11:06:10AM -0700, Bobby Crabtree wrote:
>> I'm looking to upstream a new feature in which the regulator core
>> aggregates voltage requests from multiple consumers and applies the best
>> fitting voltage (e.g. max voltage) to a shared supply. The core would
> 
> It's unlikely that the highest voltage would ever be the best choice...
> 
We do need the highest voltage. Let's say we have two consumers
(A and B). Both require 1.3V for "normal" operations. Then let's
say that consumer A can save power by reducing the voltage to 1.1V
(but it doesn't require 1.1V). If the core were to immediately apply
1.1V, then the 1.3V requirement of consumer B would not be satisfied.

>> recompute the best fitting voltage when a consumer requests a voltage
>> change or requests to enable/disable the regulator (similar logic to
>> DRMS).
> 
>> The reason we need this feature is for power savings. It would allow two
>> or more consumers to "vote" on a voltage that's lower than the normal
>> operating voltage.
> 
> This was actually a feature of the regulator API when originally
> proposed, it got dropped for ease of review but there's some remanants
> of this in the code so it shouldn't be hard to resurrect.  Whenever a
> voltage was set the code stored the range on the consumer then iterated
> over all consumers applying their ranges plus the machine constraints
> rather than just using the immediate value.
> 
I noticed some of the remnants. But I'm not sure I follow what you
are saying. What range would the core actually propagate to the
driver? The minimum min_uV and the maximum max_uV? We need the core
to propagate the maximum min_uV and the maximum max_uV.

>> 1. Introduce a new API:
> 
>> int regulator_set_optimum_voltage(struct regulator *regulator,
>> int min_uV, int max_uV);
> 
> Why would you want to do this?  This is just the same arguments as the
> standard regulator_set_voltage() call and if we're ever setting anything
> other than the optimal voltage we probably ought to just stop doing
> that.
> 
"Optimum" was a bad choice of words. Seems that a new API isn't
preferred, so let's scrap this option.

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: regulator voltage aggregation

2010-08-17 Thread Mark Brown
On Tue, Aug 17, 2010 at 07:28:06PM +0100, Alan Cox wrote:
> O> int regulator_set_optimum_voltage(struct regulator *regulator,
> > int min_uV, int max_uV);

> Pedantic hat on - how can it be optimum if its a range ? (and an
> adjective but that is really pedantic) ;))

> Surely it's not the optimal value, it's the range at which it works at
> all you are defining (between off, and escaping smoke).

> set_voltage_range() sounds rather more natural to me.

The regulator API always specifies voltages in ranges, picking the
lowest possible voltage from the range.

One reason for this is that it allows us to finesse the mismatches
between the fixed steps that regulators offer and the requirements of
consumers - we don't needlessly fail to set a voltage due to a few
milivolts difference that the consumer doesn't care about.  The other
reason is that it maps very well onto a lot of applications which do
have fairly wide acceptable ranges.  For things like DVFS lowering the
frequency will typically reduce the minimum voltage required by the
device but will not affect the maximum voltage it can tolerate so we
allow the driver to specify the full range it can operate at and then
deliver the maximum power saving we can within the constraints of the
system.
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: regulator voltage aggregation

2010-08-17 Thread Mark Brown
On Tue, Aug 17, 2010 at 11:06:10AM -0700, Bobby Crabtree wrote:
> I'm looking to upstream a new feature in which the regulator core
> aggregates voltage requests from multiple consumers and applies the best
> fitting voltage (e.g. max voltage) to a shared supply. The core would

It's unlikely that the highest voltage would ever be the best choice...

> recompute the best fitting voltage when a consumer requests a voltage
> change or requests to enable/disable the regulator (similar logic to
> DRMS).

> The reason we need this feature is for power savings. It would allow two
> or more consumers to "vote" on a voltage that's lower than the normal
> operating voltage.

This was actually a feature of the regulator API when originally
proposed, it got dropped for ease of review but there's some remanants
of this in the code so it shouldn't be hard to resurrect.  Whenever a
voltage was set the code stored the range on the consumer then iterated
over all consumers applying their ranges plus the machine constraints
rather than just using the immediate value.

> 1. Introduce a new API:

> int regulator_set_optimum_voltage(struct regulator *regulator,
> int min_uV, int max_uV);

Why would you want to do this?  This is just the same arguments as the
standard regulator_set_voltage() call and if we're ever setting anything
other than the optimal voltage we probably ought to just stop doing
that.

> 2. Add a flag to the regulation_constraints structure and reuse the
> existing regulator_set_voltage API.

> struct regulation_constraints {
> ...
> unsigned aggregate_uV:1;
> ...
> };

> Does this sound like a reasonable feature? And if so, are there any
> preferences as to how the feature is implemented and exposed?

If we were going to add something for this it should be a capability,
however I don't think there's any need to add anything to the API since
this is the only sane interpretation of allowing voltage changes on a
regulator with more than one consumer.
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: regulator voltage aggregation

2010-08-17 Thread Alan Cox
O> int regulator_set_optimum_voltage(struct regulator *regulator,
> int min_uV, int max_uV);

Pedantic hat on - how can it be optimum if its a range ? (and an
adjective but that is really pedantic) ;))

Surely it's not the optimal value, it's the range at which it works at
all you are defining (between off, and escaping smoke).

set_voltage_range() sounds rather more natural to me.

Alan
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


regulator voltage aggregation

2010-08-17 Thread Bobby Crabtree
I'm looking to upstream a new feature in which the regulator core
aggregates voltage requests from multiple consumers and applies the best
fitting voltage (e.g. max voltage) to a shared supply. The core would
recompute the best fitting voltage when a consumer requests a voltage
change or requests to enable/disable the regulator (similar logic to
DRMS).

The reason we need this feature is for power savings. It would allow two
or more consumers to "vote" on a voltage that's lower than the normal
operating voltage.

I've got a couple implementations in mind.

1. Introduce a new API:

int regulator_set_optimum_voltage(struct regulator *regulator,
int min_uV, int max_uV);

2. Add a flag to the regulation_constraints structure and reuse the
existing regulator_set_voltage API.

struct regulation_constraints {
...
unsigned aggregate_uV:1;
...
};

Does this sound like a reasonable feature? And if so, are there any
preferences as to how the feature is implemented and exposed?

Bobby Crabtree

Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] input: mouse: add qci touchpad driver

2010-08-17 Thread Dmitry Torokhov

Hi Neil,

On Aug 17, 2010, at 10:14 AM, Neil Leeder   
wrote:



On 8/13/2010 8:54 PM, Dmitry Torokhov wrote:
Also it is not a simple coincidence that to enable device you send  
0xf4
to it (which is PSMOUSE_CMD_ENABLE - standard PS/2 command). This  
tends

to suggest that interface is not actually hidden and that the device
(touchpad) could be replaced with other kinds of devices.

Anyway, please try the driver (you  may need to hardcode the IRQ  
trigger
type for now) and see if psmouse is able to talk to the touchpad.  
If it

is then serio is the proper solution.


Dmitri,
I fixed one line in the wpce775x_serio driver which looked like a  
typo - hope I got that right:


   for (i = 0; i < count; i++)
-serio_interrupt(ps2if->serio, ps2if->data_in[1], 0);
+serio_interrupt(ps2if->serio, ps2if->data_in[i], 0);
   }



Yep, that was a typo.

I tried running with psmouse but it didn't work. The touchpad was  
never detected as a synaptics touchpad. I looked at the dataflow  
from the device and it wasn't responding to the commands that  
synaptics_detect() was sending it. It eventually showed up as an  
unknown logitech mouse.



That suggests that the device responds to at least basic PS/2 queries.

I can see data being passed through the serio driver but the  
logitech driver can't process it.




What about loading psmouse module with proto=bare?

Could you also dump the data received from touchpad during probing?


--
Dmitry

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] input: mouse: add qci touchpad driver

2010-08-17 Thread Neil Leeder

On 8/13/2010 8:54 PM, Dmitry Torokhov wrote:

Also it is not a simple coincidence that to enable device you send 0xf4
to it (which is PSMOUSE_CMD_ENABLE - standard PS/2 command). This tends
to suggest that interface is not actually hidden and that the device
(touchpad) could be replaced with other kinds of devices.

Anyway, please try the driver (you  may need to hardcode the IRQ trigger
type for now) and see if psmouse is able to talk to the touchpad. If it
is then serio is the proper solution.


Dmitri,
I fixed one line in the wpce775x_serio driver which looked like a typo - 
hope I got that right:


for (i = 0; i < count; i++)
-   serio_interrupt(ps2if->serio, ps2if->data_in[1], 0);
+   serio_interrupt(ps2if->serio, ps2if->data_in[i], 0);
}

I tried running with psmouse but it didn't work. The touchpad was never 
detected as a synaptics touchpad. I looked at the dataflow from the 
device and it wasn't responding to the commands that synaptics_detect() 
was sending it. It eventually showed up as an unknown logitech mouse. I 
can see data being passed through the serio driver but the logitech 
driver can't process it.


--
Neil
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Keyboard for HTC-Dream

2010-08-17 Thread David Lanzendörfer
>Matrix driver should be capable of doing that... and look into
>staging, IIRC the driver is there.
Hmm. Ok. Thx!
Then it's just not initialised on bootup?
Because there's nothing happening, when I'm try'n to type root into "login:"
(I know dumb error description... Sry,)
Well then I'll tinker around, as soon as all my examina are done.
(7 examina. All two days I write one. => 3 weeks no time)
Thx a lot for your help!
I'll report results here, when I've got some.

leviathan


signature.asc
Description: This is a digitally signed message part.


Re: [PATCH v4] arm: msm: Add MSM IOMMU support.

2010-08-17 Thread Stepan Moskovchenko

 On 8/16/2010 11:32 AM, Konrad Rzeszutek Wilk wrote:

I did a very brief look.


+   dmac_flush_range(fl_table, fl_table + SZ_16K);
+
+   for (i = 0; i<  4096; i++)

Can you use a #define for the 4096? Will that value ever change?
I suppose a #define can be used, but this is a HW-specific number that 
will never ever change.



+   if ((fl_table[i]&  0x03) == FL_TYPE_TABLE) {
+   void *sl_table = __va(fl_table[i]&  0xFC00);

Does it make sense to define say:
#define MASK_XX (x) x&  0xFC00
and
#define MASK_XY (x) x&  0x

and use those instead of these hard-coded values?

I guess so.. again, HW specific.



+   priv->pgtable = (unsigned long *)__get_free_pages(GFP_KERNEL, 2);

Ugh.  Can you use get_order(SZ_16K) instead?


+   /* Invalidate context TLB */
+   SET_CTX_TLBIALL(base, ctx, 0);
+   SET_V2PPR_VA(base, ctx, va>>  12);

Hmm, PAGE_SHIFT can't be used? Or some other #define?
I guess I can use the IOMMU PA shift. PAGE_SHIFT is not appropriate here 
because that is MMU-specific.


I can put out a v5 early next week.

Thanks
Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html