]> git.karo-electronics.de Git - karo-tx-linux.git/log
karo-tx-linux.git
9 years agogreybus: operation: allow maximum-sized messages
Johan Hovold [Tue, 19 May 2015 09:22:44 +0000 (11:22 +0200)]
greybus: operation: allow maximum-sized messages

Increase the maximum allowed buffer size to the full 16-bit range
supported by the protocol.

Note that host devices will generally use smaller buffers than the
maximum.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: fix host-device buffer constraints
Johan Hovold [Tue, 19 May 2015 09:22:43 +0000 (11:22 +0200)]
greybus: fix host-device buffer constraints

Host devices impose buffer-size constraints on Greybus core which are
taken into account when allocating messages.

Make sure to verify these constraints when the host device is allocated,
rather than when the first message is allocated.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: remove unused prototypes from header
Johan Hovold [Tue, 19 May 2015 09:22:42 +0000 (11:22 +0200)]
greybus: remove unused prototypes from header

Remove a couple of unused function prototypes from the greybus header
file.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: remove unnecessary greybus.h includes
Johan Hovold [Tue, 19 May 2015 09:22:41 +0000 (11:22 +0200)]
greybus: remove unnecessary greybus.h includes

Remove unnecessary greybus.h include from header files.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Use gb_gpbridge_protocol_init()
Viresh Kumar [Wed, 20 May 2015 11:50:10 +0000 (17:20 +0530)]
greybus: Use gb_gpbridge_protocol_init()

Start using gb_gpbridge_protocol_init() in gpbridge drivers.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: protocol: Add gb_gpbridge_protocol_driver()
Viresh Kumar [Wed, 20 May 2015 11:50:09 +0000 (17:20 +0530)]
greybus: protocol: Add gb_gpbridge_protocol_driver()

There are many gpbridge protocol drivers that need gb_protocol_driver()
without the module_init/exit() lines. Lets create one for them.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpbridge: rename gpb.c to gpbridge.c
Viresh Kumar [Wed, 20 May 2015 11:26:46 +0000 (16:56 +0530)]
greybus: gpbridge: rename gpb.c to gpbridge.c

That's what followed for .h, etc.. Rename for better consistency.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: raw: move module_{init|exit} to the end of functions
Viresh Kumar [Wed, 20 May 2015 11:24:22 +0000 (16:54 +0530)]
greybus: raw: move module_{init|exit} to the end of functions

This is what coding guidelines say. Lets do it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: module: name routines consistently
Viresh Kumar [Wed, 20 May 2015 11:18:04 +0000 (16:48 +0530)]
greybus: module: name routines consistently

Routines should be named this way: gb_<object>_<operation>. Fix all
routines that don't match this.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: name routines consistently
Viresh Kumar [Wed, 20 May 2015 12:03:51 +0000 (17:33 +0530)]
greybus: interface: name routines consistently

Routines should be named this way: gb_<object>_<operation>. Fix all
routines that don't match this.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: name routines consistently
Viresh Kumar [Wed, 20 May 2015 11:18:01 +0000 (16:48 +0530)]
greybus: endo: name routines consistently

Routines should be named this way: gb_<object>_<operation>. Fix all
routines that don't match this.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: name routines consistently
Viresh Kumar [Wed, 20 May 2015 11:18:00 +0000 (16:48 +0530)]
greybus: connection: name routines consistently

Routines should be named this way: gb_<object>_<operation>. Fix all
routines that don't match this.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: protocol: remove leading underscore from _gb_protocol_find()
Viresh Kumar [Wed, 20 May 2015 11:17:59 +0000 (16:47 +0530)]
greybus: protocol: remove leading underscore from _gb_protocol_find()

Remove the unnecessary underscore from _gb_protocol_find().

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: spi: Move structure definitions into gpbridge.h
Viresh Kumar [Wed, 20 May 2015 11:03:57 +0000 (16:33 +0530)]
greybus: spi: Move structure definitions into gpbridge.h

In order to facilitate re-use of spi structures, split them out of
independent files and add them into a shared gpbridge.h

This will be a prereq to sharing these headers w/ gbsim.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: fix tab/space mistake
Viresh Kumar [Wed, 20 May 2015 11:02:28 +0000 (16:32 +0530)]
greybus: gpio: fix tab/space mistake

Spaces were present in place of tab. Fix that.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: raw: include uaccess.h to fix warning
Viresh Kumar [Wed, 20 May 2015 11:01:19 +0000 (16:31 +0530)]
greybus: raw: include uaccess.h to fix warning

This is what I get over mainline:

greybus/raw.c: In function 'gb_raw_send':
greybus/raw.c:153:2: error: implicit declaration of function 'copy_from_user' [-Werror=implicit-function-declaration]
  if (copy_from_user(&request->data[0], data, len)) {
  ^
greybus/raw.c: In function 'raw_read':
greybus/raw.c:305:2: error: implicit declaration of function 'copy_to_user' [-Werror=implicit-function-declaration]
  if (copy_to_user(buf, &raw_data->data[0], raw_data->len)) {
  ^

Fix this by including uaccess.h.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: raw: add raw greybus kernel driver
Greg Kroah-Hartman [Fri, 8 May 2015 13:50:17 +0000 (15:50 +0200)]
greybus: raw: add raw greybus kernel driver

This adds a driver that implements the greybus Raw protocol as
specified.

It preserves the message boundries by only allowing a read to receive
a "full" message, and any write() call also is passed in a single
greybus request.

Totally untested, given that we have no raw firmware or gbsim code yet.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Rui Miguel Silva <rui.silva@linaro.org>
9 years agogreybus: connection: remove lock around ida_simple_* functions
Greg Kroah-Hartman [Thu, 14 May 2015 17:40:02 +0000 (10:40 -0700)]
greybus: connection: remove lock around ida_simple_* functions

ida_simple_* has a built-in spinlock, no need to grab another lock when
accessing it.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: vibrator: convert idr to be an ida
Greg Kroah-Hartman [Thu, 14 May 2015 17:39:35 +0000 (10:39 -0700)]
greybus: vibrator: convert idr to be an ida

All we need is a simple ida, so use that interface instead of the more
"complex" idr one.  Bonus is we don't need to fix the locking issue I
forgot about when using an idr, as ida has one built-in.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: loopback: add more clean up when init connection fails
Phong Tran [Thu, 14 May 2015 16:03:04 +0000 (23:03 +0700)]
greybus: loopback: add more clean up when init connection fails

It should remove the object from sysfs when loopback
connection init error.

Signed-off-by: Phong Tran <tranmanphong@gmail.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: make: check kernel configuration options
Rui Miguel Silva [Wed, 13 May 2015 17:59:00 +0000 (18:59 +0100)]
greybus: make: check kernel configuration options

Add checks for options that shall be enabled in the kernel config
and for options that shall be disable.

To add options to list append them to CONFIG_OPTIONS_ENABLE or
CONFIG_OPTIONS_DISABLE respectively.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: support module-initiated requests
Alex Elder [Tue, 12 May 2015 02:16:39 +0000 (21:16 -0500)]
greybus: loopback: support module-initiated requests

There's no reason we can't support loopback pings or transfers
initiated by the module.  Allow it.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: define loopback functions symbolically
Alex Elder [Tue, 12 May 2015 02:16:38 +0000 (21:16 -0500)]
greybus: loopback: define loopback functions symbolically

Add some symbols to indicate what kind of "function" the
loopback thread is supposed to be performing--the type of
traffic it generates over its connection.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: symbolically define max wait time
Alex Elder [Tue, 12 May 2015 02:16:37 +0000 (21:16 -0500)]
greybus: loopback: symbolically define max wait time

Use a symbolic constant to define the maximum time (number of
milliseconds) to delay between initiated operations.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: fix an incorrect comment
Alex Elder [Tue, 12 May 2015 02:16:36 +0000 (21:16 -0500)]
greybus: loopback: fix an incorrect comment

Fix a comment that incorrectly says the delay between messages is
limited to 1024 msec; it actually must be <= 1000 msec.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: return the right error value
Alex Elder [Tue, 12 May 2015 02:16:35 +0000 (21:16 -0500)]
greybus: loopback: return the right error value

If an error occurs starting up the loopback thread, the error code
is not extracted properly.  Fix that.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: fix the type attribute check
Alex Elder [Tue, 12 May 2015 02:16:34 +0000 (21:16 -0500)]
greybus: loopback: fix the type attribute check

In gb_loopback_check_attr(), the value of gb->type is checked for
validity.  The only valid values are 0, 1, and 2.  But the check
allows the value 3.  Fix that.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: audio: fix a bunch of endian issues
Greg Kroah-Hartman [Mon, 11 May 2015 21:09:32 +0000 (14:09 -0700)]
greybus: audio: fix a bunch of endian issues

sparse is rightfully complaining about a lack of converting when
accessing or assigning to little endian fields.  Fix them all up to work
properly.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: audio: fix some sparse static warnings
Greg Kroah-Hartman [Mon, 11 May 2015 21:09:09 +0000 (14:09 -0700)]
greybus: audio: fix some sparse static warnings

This makes some functions and structures static, as warned by sparse, as
they don't need to be global.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: manifest: be coherent with protocol name
Rui Miguel Silva [Mon, 11 May 2015 18:22:03 +0000 (19:22 +0100)]
greybus: manifest: be coherent with protocol name

remane protocol define from GREYBUS_PROTOCOL_LED to GREYBUS_PROTOCOL_LIGHTS to
be coherent with the specification.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: Create modules after validating Endo ID
Viresh Kumar [Fri, 8 May 2015 07:28:51 +0000 (12:58 +0530)]
greybus: endo: Create modules after validating Endo ID

We already have code to parse Endo ID, lets use it to create modules at
run time instead of creating them from a static array.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: Add code to validate Endo ID
Viresh Kumar [Fri, 8 May 2015 07:28:50 +0000 (12:58 +0530)]
greybus: endo: Add code to validate Endo ID

Endo is described by a 16 bit value. Which represents the properties of
modules, interface and ribs on front and back of endo.

This 16 bit value can be used to find all possible pairs of modules and
interfaces and creating modules based on that.

This patch provides helpers to parse 16 bit Endo ID.

(Based on original code written by Alex Elder.)

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: fix build breakage on 4.1-rc1
Greg Kroah-Hartman [Fri, 8 May 2015 20:40:47 +0000 (22:40 +0200)]
greybus: gb-audio: fix build breakage on 4.1-rc1

In commit 1efb53a220b7 ("ASoC: simple-card: Remove support for setting
differing DAI formats"), the .fmt field was removed from struct
asoc_simple_dai.  Fix this build breakage by not trying to set it.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Acked-by: John Stultz <john.stultz@linaro.org>
9 years agogreybus: gb-audio: fix build warning
Greg Kroah-Hartman [Fri, 8 May 2015 20:33:36 +0000 (22:33 +0200)]
greybus: gb-audio: fix build warning

sizeof wants %zu when on a 64bit build, so change the dev_err() call to
remove a build warning in the audio.c file.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Acked-by: John Stultz <john.stultz@linaro.org>
9 years agogreybus: Support building greybus on host PC
Bryan O'Donoghue [Fri, 8 May 2015 00:00:50 +0000 (17:00 -0700)]
greybus: Support building greybus on host PC

Introduce INSTALL_MOD_PATH to allow for building and installing of the
greybus modules from a different location.

This lets you build the greybus modules on a PC and then install the
modules to an SD card in the appropriate location relative to the SD such
as /media/sdcard/lib/modules/version and subsequent running of depmod in
the same location. If INSTALL_MOD_PATH isn't specified the default
behaviour of installing and depmoding to /lib/modules/version is
maintained.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Add integrated greybus audio driver
John Stultz [Fri, 8 May 2015 19:57:36 +0000 (12:57 -0700)]
greybus: gb-audio: Add integrated greybus audio driver

So here's the current greybus audio driver, which I
wanted to send out for more serious review and
consideration for merging.

I've tried to integrate much of the feedback from the
last round and most of the hotplug issues that I've found
have been resolved. I've tested this via gbsim, and the
Android ARA HAL layer seems to work with it.

Mark has also successfully played audio with this driver,
adding a few hacks to get the codec's i2c connection to
probe.

Current issues:
* Hotplug problem - When gbsim is killed, or the module
  removed, the greybus driver gets stuck since the android
  mediaserver process is holding the audio device open.
  Killing the mediaserver allows things to clean up and
  allows greybus to accept new gbsim connections. I have
  a workaround patch to the soc-core.c logic which converts
  the snd_card_free() call to snd_card_free_when_closed()
  which allows the greybus connection cleanup to finish.

Remaining todos:
* Probably need to break apart the mgmt_setup function
  to integrate better with the constraint logic. I took
  a really basic stab at this, but more is probably
  needed.
* Figure out how to properly find and tie in the
  codec's I2C bus-id to the driver.

This code requires that the kernel support the following
config options, which I've enabled in a separate kernel
patch:
CONFIG_SND_SIMPLE_CARD
CONFIG_SND_SOC_SPDIF
CONFIG_SND_SOC_RT5645

I really can't calim to be the sole author of this, since
many many fixes and tweaks that have been folded in have
come from Mark Greer. His analsysis and debugging is really
what has made this dummy-framework driver evolve into an
actual audio driver. So much credit and thanks to Mark!

Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: eliminate extra response flag definitions
Alex Elder [Thu, 7 May 2015 18:03:52 +0000 (13:03 -0500)]
greybus: eliminate extra response flag definitions

All protocols use the same value to distinguish between request and
response message types.  This is a requirement.

Use GB_MESSAGE_TYPE_RESPONSE rather than GB_OPERATION_TYPE_RESPONSE
for the name of the flag used to distiguish between request and
response messages.

Get rid of the redundant response flag definitions that are
associated with specific protocols.

Describe the symbolic values as "operation types" rather than
"message types" where they are defined.  The message type for a
request is the same as the operation type; the message type for a
response is the operation type OR'd with GB_MESSAGE_TYPE_RESPONSE.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: battery: use feature tag rather than kernel version
Alex Elder [Thu, 7 May 2015 18:00:21 +0000 (13:00 -0500)]
greybus: battery: use feature tag rather than kernel version

Conditionally define a new symbol DRIVER_OWNS_PSY_STRUCT, which is
set in "kernel_ver.h" based on on the kernel version.  Use it to
distinguish code used for kernels that differ in whether a power
supply structure is owned by the driver, or by the power supply
core.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: battery: free struct on error in caller
Alex Elder [Thu, 7 May 2015 18:00:20 +0000 (13:00 -0500)]
greybus: battery: free struct on error in caller

When a battery connection is initialized, a gb_battery structure for
it is allocated in gb_battery_connection_init().  Currently that
function ends by calling init_and_register(); in the event an error
occurs, init_and_register() is responsible for freeing the allocated
gb_battery structure.

Make the code a bit better balanced by having the function that
allocates the structure be responsible for freeing it in case of
error.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2: fix driver name collision with es1
Rob Herring [Tue, 5 May 2015 16:04:22 +0000 (11:04 -0500)]
greybus: es2: fix driver name collision with es1

Both ES1 and ES2 drivers cannot be loaded due to a driver name conflict.
Give ES2 driver the correct name.

Signed-off-by: Rob Herring <rob.herring@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: protocol.h: fix up long lines in define_get_version()
Greg Kroah-Hartman [Fri, 1 May 2015 19:06:12 +0000 (21:06 +0200)]
greybus: protocol.h: fix up long lines in define_get_version()

No need to go past 80 characters for the define_get_version macro, so
fix up the indentation to not do so.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
9 years agogreybus: protocol.h: macros should not have a trailing ';'
Greg Kroah-Hartman [Fri, 1 May 2015 19:05:50 +0000 (21:05 +0200)]
greybus: protocol.h: macros should not have a trailing ';'

Remove the trailing ';' character from the gb_protocol_driver() macro as
it's not needed and is bad coding style.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
9 years agogreybus: kernel_ver.h: add a blank line after a variable definition
Greg Kroah-Hartman [Fri, 1 May 2015 19:05:29 +0000 (21:05 +0200)]
greybus: kernel_ver.h: add a blank line after a variable definition

checkpatch reminds us that a blank line should go after a variable
definition, so fix it up here.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
9 years agogreybus: kernel_ver.h: add a ' ' character to KERNEL_VERSION()
Greg Kroah-Hartman [Fri, 1 May 2015 19:05:03 +0000 (21:05 +0200)]
greybus: kernel_ver.h: add a ' ' character to KERNEL_VERSION()

You should always put a space after a ',', so do it for the
KERNEL_VERSION() macro as well.  This makes checkpatch.pl happy also.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
9 years agogreybus: kernel_ver.h: fix leading space coding style issues
Greg Kroah-Hartman [Fri, 1 May 2015 19:04:47 +0000 (21:04 +0200)]
greybus: kernel_ver.h: fix leading space coding style issues

When cutting and pasting some of the ATTR macros into kernel_ver.h, I
dropped the tabs.  Fix this up and make checkpatch.pl happy.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
9 years agogreybus: battery: update for 4.1 power supply api changes
Greg Kroah-Hartman [Fri, 1 May 2015 18:41:00 +0000 (20:41 +0200)]
greybus: battery: update for 4.1 power supply api changes

The 4.1-rc1 kernel changed the power supply apis such that the
structures are now owned by the power supply core, and not the
individual drivers.  This broke the greybus battery driver, so update it
to support both the old and the new apis.

The API changes were such that I can't "hide" them in kernel_ver.h, but
rather the driver itself needs to have ugly #ifdefs in it.  I tried to
keep it to a minimum, making a sub-function for initializing the power
supply device that is implemented differently for different kernel
versions.

When this is submitted upstream, or if we ever move our AP development
to 4.1 or greater, the support for older kernels can be removed.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
9 years agogreybus: Move id-field before bundle-field in CPort Descriptor.
Viresh Kumar [Tue, 28 Apr 2015 14:21:41 +0000 (19:51 +0530)]
greybus: Move id-field before bundle-field in CPort Descriptor.

Note that this also makes sure the id-field is naturally aligned in case
we ever were to remove the __packed attribute.

Reviewed-by: Alex Elder <elder@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Explicitly add pad-bytes to manifest descriptors
Viresh Kumar [Tue, 28 Apr 2015 14:21:40 +0000 (19:51 +0530)]
greybus: Explicitly add pad-bytes to manifest descriptors

Explicitly add pad-bytes to manifest descriptors to match their layout
in greybus specification.

Reviewed-by: Alex Elder <elder@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Remove class descriptor
Viresh Kumar [Tue, 28 Apr 2015 14:21:39 +0000 (19:51 +0530)]
greybus: Remove class descriptor

We carry this information as part of bundle descriptor now and this can
be removed.

Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: drop interface-version field
Viresh Kumar [Tue, 28 Apr 2015 14:21:38 +0000 (19:51 +0530)]
greybus: manifest: drop interface-version field

It is not required anymore. Drop it.

Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: Remove vendor, product and unique-id from interface descriptor
Viresh Kumar [Tue, 28 Apr 2015 14:21:37 +0000 (19:51 +0530)]
greybus: manifest: Remove vendor, product and unique-id from interface descriptor

These should come from control protocol instead.

For now, initialize this statically with a FIXME to not forget it later.

Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: use kstrdup() for state file
Alex Elder [Fri, 17 Apr 2015 19:41:47 +0000 (14:41 -0500)]
greybus: bundle: use kstrdup() for state file

The kernfs code guarantees we'll get a NUL-terminated buffer.
Use kstrdup() rather than kzalloc() + memcpy() in state_store()
making it slightly clearer what we're doing.  This has the added
benefit of guaranteeing that the stored string has no NUL character
inside it.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: Warn if descriptor size > expected size
Viresh Kumar [Wed, 29 Apr 2015 05:32:08 +0000 (11:02 +0530)]
greybus: manifest: Warn if descriptor size > expected size

A descriptor passed to AP can be bigger than what AP expects, if
manifest's minor version is higher with same major number as the AP. As
it can have some extra data in descriptor.

But, if AP and manifest versions are identical, or if the AP's minor
version is greater than the manifest version, we should at least warn
(if not fail).

Doing this would require some changes to record the manifest version
somewhere reachable by identify_descriptor().

For now, just warn if descriptor is bigger than expected.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: Account for padding in string descriptor
Viresh Kumar [Tue, 28 Apr 2015 14:21:35 +0000 (19:51 +0530)]
greybus: manifest: Account for padding in string descriptor

String descriptors are padded towards the end to align them to 4 byte
boundaries. Take that into account while calculating expected size.

Reviewed-by: Alex Elder <elder@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Explicitly mark structures as packed
Viresh Kumar [Tue, 28 Apr 2015 14:21:34 +0000 (19:51 +0530)]
greybus: Explicitly mark structures as packed

These structures are already marked as __packed, as these are enclosed
within:

#pragma pack(push, 1)
#pragma pack(pop)

Lets mark them __packed explicitly.

Reviewed-by: Alex Elder <elder@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: Rename endo's 'type' as 'id'
Viresh Kumar [Tue, 28 Apr 2015 14:10:27 +0000 (19:40 +0530)]
greybus: endo: Rename endo's 'type' as 'id'

There can be three Endo types: mini, medium and large. And that's what
Endo 'type' should refer to.

But we have named the 16 bit number that uniquely represents a valid
endo, as its type. 'id' seems to be a more suitable name to that instead
of 'type'. Lets rename it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: Use a real endo id
Viresh Kumar [Tue, 28 Apr 2015 14:10:26 +0000 (19:40 +0530)]
greybus: endo: Use a real endo id

0x0555 isn't a valid endo id, use a real one.

0x4755 should be the Endo id for the (medium) Spiral 2 prototype. Lets
use that.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: MODULE_LICENSE cleanup
Greg Kroah-Hartman [Mon, 13 Apr 2015 17:51:33 +0000 (19:51 +0200)]
greybus: MODULE_LICENSE cleanup

These are all GPLv2-only kernel modules, so properly set the correct
MODULE_LICENSE string to make static checkers happy.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: add state sysfs file
Greg Kroah-Hartman [Mon, 13 Apr 2015 17:48:37 +0000 (19:48 +0200)]
greybus: bundle: add state sysfs file

A bundle has a state file, that is managed by the endo userspace
process.  This file can be written to and any process that is polling on
the file will be woken up and can read the new value.  It's a "cheap"
IPC for programs that are not allowed to do anything other than
read/write to kernel sysfs files.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: loopback: fix 64-bit divisions
Johan Hovold [Thu, 16 Apr 2015 07:53:59 +0000 (09:53 +0200)]
greybus: loopback: fix 64-bit divisions

The code uses 64-bit divisions, which should be avoided, and also
prevents the module from loading on 32-bit systems:

gb_loopback: Unknown symbol __aeabi_uldivmod (err 0)

Fix by using the kernel's 64-bit by 32-bit division implementation
do_div.

Compile tested only. I did not look very closely at the code itself.
Perhaps this could be worked around in some other way, but this silences
the linker warning and allows the module to be loaded.

Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpbridge.h: remove BIT() define
Greg Kroah-Hartman [Fri, 10 Apr 2015 09:20:35 +0000 (11:20 +0200)]
greybus: gpbridge.h: remove BIT() define

It's up to other files to define this if it's not present, not this
file.

Reported-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpbridge.h: whitespace cleanups
Greg Kroah-Hartman [Fri, 10 Apr 2015 09:18:49 +0000 (11:18 +0200)]
greybus: gpbridge.h: whitespace cleanups

Replace #define<TAB> with #define<SPACE>.

Also move the #ifdef block to below the initial comment block, like
other .h files are.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Move briged phy structure definitions into gpbridge.h
John Stultz [Thu, 9 Apr 2015 23:01:31 +0000 (16:01 -0700)]
greybus: Move briged phy structure definitions into gpbridge.h

In order to facilitate re-use of the gpio, i2c, pwm and i2s
structures, split them out of independent files and add
them into a shared gpbridge.h

This will be a prereq to sharing these headers w/ gbsim.

Cc: Alex Elder <alex.elder@linaro.org>
Cc: Greg Kroah-Hartman <gregkh@google.com>
CC: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Documentation/sysfs-bus-greybus: document module sysfs files
Greg Kroah-Hartman [Tue, 7 Apr 2015 18:28:13 +0000 (20:28 +0200)]
greybus: Documentation/sysfs-bus-greybus: document module sysfs files

This documents the module slot sysfs files "epm", "power_control", and
"present".

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: Documentation/sysfs-bus-greybus: document the endo and SVC
Greg Kroah-Hartman [Tue, 7 Apr 2015 18:27:53 +0000 (20:27 +0200)]
greybus: Documentation/sysfs-bus-greybus: document the endo and SVC

This documents the endo device, and the SVC specific files that are
present in the sysfs device tree.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: Documentation/sysfs-bus-greybus: update kernel version and date
Greg Kroah-Hartman [Tue, 7 Apr 2015 18:27:36 +0000 (20:27 +0200)]
greybus: Documentation/sysfs-bus-greybus: update kernel version and date

The kernel is now on the 4.XX numbering scheme, and it's going to be a
while before we merge this code, so pick a date sometime in the future
to be safe.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: endo: hook up endos into the device tree
Greg Kroah-Hartman [Tue, 7 Apr 2015 18:27:15 +0000 (20:27 +0200)]
greybus: endo: hook up endos into the device tree

This hooks up the endo, and modules, into the device tree.  All modules
for a specific endo are created when the host device is initialized.
When an interface is registered, the correct module for it is found and
that module is used for the sysfs tree.  When the interface is removed,
the reference on the module is dropped.

When the host device goes away, the whole endo and modules are removed
at once.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: endo: add endo structures and logic
Greg Kroah-Hartman [Tue, 7 Apr 2015 18:26:53 +0000 (20:26 +0200)]
greybus: endo: add endo structures and logic

This adds endo.c and endo.h and provides functions to create an endo and
the initial 0x0555 set of modules.

But, it doesn't hook this logic up into the running code yet, that comes
next.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: module.c: add attributes
Greg Kroah-Hartman [Tue, 7 Apr 2015 18:26:30 +0000 (20:26 +0200)]
greybus: module.c: add attributes

This adds the attributes power_control and present to a module.  It also
removes the unneeded module_id attribute, as that comes from the name of
the module itself.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Reviewed-by: Alex Elder <elder@linaro.org>
9 years agogreybus: drop host-driver buffer headroom
Johan Hovold [Tue, 7 Apr 2015 09:27:21 +0000 (11:27 +0200)]
greybus: drop host-driver buffer headroom

Drop the host-driver buffer headroom that was used to transfer the cport
id on ES1 and ES2.

Rather than transferring additional bytes on the wire and having to deal
with buffer-alignment issues (e.g. requiring the headroom to be a
multiple of 8 bytes) simply drop the headroom functionality.

Host drivers are expected set up their transfer descriptors separately
from the data buffers and any intermediate drivers (e.g. for Greybus
over USB) can (ab)use the operation message pad bytes for now.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2: sync up with recent es1 changes
Johan Hovold [Tue, 7 Apr 2015 09:27:20 +0000 (11:27 +0200)]
greybus: es2: sync up with recent es1 changes

Fix transfer-buffer alignment of es2 as well.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es1: fix transfer-buffer alignment
Johan Hovold [Tue, 7 Apr 2015 09:27:19 +0000 (11:27 +0200)]
greybus: es1: fix transfer-buffer alignment

Fix transfer-buffer alignment of outgoing transfers which are currently
byte aligned.

Some USB host drivers cannot handle byte-aligned buffers and will
allocate temporary buffers, which the data is copied to or from on every
transfer. This affects for example musb (e.g. Beaglebone Black) and
ehci-tegra (e.g. Jetson).

Instead of transferring pad bytes on the wire, let's (ab)use the pad
bytes of the operation message header to transfer the cport id. This
gives us properly aligned buffers and more efficient transfers in both
directions.

By using both pad bytes, we can also remove the arbitrary limitation of
256 cports.

Note that the protocol between the host driver and the UniPro bridge is
not necessarily Greybus. As long as the firmware clears the pad bytes
before forwarding the data, and the host driver does the same before
passing received data up the stack, this should be considered "legal"
use.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: operation: add explicit padding to message header
Johan Hovold [Tue, 7 Apr 2015 09:27:18 +0000 (11:27 +0200)]
greybus: operation: add explicit padding to message header

Add explicit pad bytes to the message header.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: operation: fix potential message corruption
Johan Hovold [Tue, 7 Apr 2015 09:27:17 +0000 (11:27 +0200)]
greybus: operation: fix potential message corruption

Make sure to allocate the message transfer-buffer separately from the
containing message structure to avoid data corruption on systems without
DMA-coherent caches.

The message structure contains state that is updated while the buffer
may be used for DMA, something which could lead to data corruption due
to cache-line sharing on some architectures.

Use the (renamed) message cache for the message structure itself and
allocate the buffer separately.

If the additional allocation is a concern, the message structures
could eventually be allocated as part of the operation structure.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: pass messages to host drivers
Johan Hovold [Tue, 7 Apr 2015 09:27:16 +0000 (11:27 +0200)]
greybus: pass messages to host drivers

Pass structured greybus messages rather than buffers to the host
drivers.

This will allow us to separate the transfer buffers from the message
structures.

Rename the related functions to reflect the new interface.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: operation: move message-header definition to header file
Johan Hovold [Tue, 7 Apr 2015 09:27:15 +0000 (11:27 +0200)]
greybus: operation: move message-header definition to header file

Move operation message-header to operation.h so that it can be used
by host drivers.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: remove obsolete buffer-alignment requirement
Johan Hovold [Tue, 7 Apr 2015 09:27:14 +0000 (11:27 +0200)]
greybus: remove obsolete buffer-alignment requirement

Remove unused and unnecessary buffer-alignment define that host driver
were supposed to use.

We can handle unaligned incoming buffers just fine by accessing the
operation-message header via a copy in the receive path, rather than
requiring host drivers to make sure the alignment is correct.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: operation: fix unaligned memory accesses in receive path
Johan Hovold [Tue, 7 Apr 2015 09:27:13 +0000 (11:27 +0200)]
greybus: operation: fix unaligned memory accesses in receive path

The buffer received from our current host driver is 1-byte aligned and
will therefore cause unaligned memory accesses if simply cast to an
operation-message header.

Fix this by making a properly aligned copy of the header in
gb_connection_recv_response before accessing its fields.

Note that this does not affect protocol drivers as the whole buffer is
copied when creating the corresponding request or response before being
forwarded.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2: sync up with recent es1 changes
Johan Hovold [Tue, 7 Apr 2015 09:27:12 +0000 (11:27 +0200)]
greybus: es2: sync up with recent es1 changes

Fix two bugs in es2 and do some minor clean up.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es1: fix buffer-size limit
Johan Hovold [Tue, 7 Apr 2015 09:27:11 +0000 (11:27 +0200)]
greybus: es1: fix buffer-size limit

The maximum buffer size does not include the headroom, so subtract the
headroom size from the actual buffer size.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es1: fix DMA-buffer on stack
Johan Hovold [Tue, 7 Apr 2015 09:27:10 +0000 (11:27 +0200)]
greybus: es1: fix DMA-buffer on stack

A stack-allocated buffer is not generally DMA-able and must not be used
for USB control transfers.

Note that the memset and extra buffer byte were redundant as no more
than the bytes actually transferred was ever added to the fifo.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es1: drop unnecessary casts
Johan Hovold [Tue, 7 Apr 2015 09:27:09 +0000 (11:27 +0200)]
greybus: es1: drop unnecessary casts

Drop unnecessary explicit casts.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: s/class_type/class
Viresh Kumar [Mon, 6 Apr 2015 10:19:36 +0000 (15:49 +0530)]
greybus: bundle: s/class_type/class

Alex suggested to name it class instead of class type.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: driver corresponds to a bundle, not interface
Viresh Kumar [Wed, 1 Apr 2015 15:02:04 +0000 (20:32 +0530)]
greybus: driver corresponds to a bundle, not interface

A Greybus driver will bind to a bundle, not an interface. Lets follow
this rule in code.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: drop module descriptors
Viresh Kumar [Wed, 1 Apr 2015 15:02:03 +0000 (20:32 +0530)]
greybus: drop module descriptors

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: Use interface descriptor instead of module descriptor to get infor...
Viresh Kumar [Wed, 1 Apr 2015 15:02:02 +0000 (20:32 +0530)]
greybus: manifest: Use interface descriptor instead of module descriptor to get information

A module can have more than one interfaces and we get hotplug events or
manifests for interfaces, not modules. Details like version, vendor,
product id, etc. can be different for different interfaces within the
same module and so shall be fetched from interface descriptor instead of
module descriptor.

So what we have been doing for module descriptors until now must be done
for interface descriptors. There can only be one interface descriptor in
the manifest. Module descriptor isn't used anymore and probably most of
its fields can be removed now.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: Initialize all bundles on link-up
Viresh Kumar [Wed, 1 Apr 2015 15:02:01 +0000 (20:32 +0530)]
greybus: bundle: Initialize all bundles on link-up

An interface can have 1 or more bundles. On link-up event, we must initialize
all the bundles associated with the interface.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: Create bundles using bundle descriptors
Viresh Kumar [Wed, 1 Apr 2015 15:02:00 +0000 (20:32 +0530)]
greybus: bundle: Create bundles using bundle descriptors

Currently we are creating bundles based on interface descriptors. An interface
can have one or more bundles associated with it and so a bundle must be created
based on a bundle descriptor.

Also get class_type from bundle descriptor.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: hid: Use payload-size to get report size
Viresh Kumar [Fri, 3 Apr 2015 06:30:48 +0000 (12:00 +0530)]
greybus: hid: Use payload-size to get report size

Report size isn't passed as first two bytes of the report according to
USB-HID spec. Get it from payload-size.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Add bundle descriptor type
Viresh Kumar [Wed, 1 Apr 2015 15:01:59 +0000 (20:31 +0530)]
greybus: Add bundle descriptor type

A bundle corresponds to a device and a greybus driver binds to it. This patch
adds a type and descriptor for bundle.

This also shuffles the values of 'enum greybus_descriptor_type' to align
them with Greybus Specifications.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: interface: Fetch interface id instead of module id during setup
Viresh Kumar [Wed, 1 Apr 2015 15:01:58 +0000 (20:31 +0530)]
greybus: interface: Fetch interface id instead of module id during setup

There can be more than one interface on a module and we need to know the
interface for which the event has occurred.

But at the same time we may not need the module id at all. During initial phase
when AP is probed, the AP will receive the unique Endo id which shall be enough
to draw relationships between interface and module ids.

Code for that isn't available today and so lets create another routine to get
module id (which needs to be fixed separately), which will simply return
interface id passed to it.

Now that we have interface id, update rest of the code to use it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Unregister devices to get them freed
Viresh Kumar [Thu, 2 Apr 2015 12:23:47 +0000 (17:53 +0530)]
greybus: Unregister devices to get them freed

Devices registered with the device-core needs to be freed by calling
device_unregister(). For module we are calling just put_device() and for
bundle, connection and interface we are calling device_del().

All of these are incomplete and so none of them get freed, i.e. the
.release() routine is never called for their devices.

Module being a special case that it needs to maintain a refcount or a
list of interfaces to trace its usage count. I have chosen refcount.

And so once the refcount is zero, we can Unregister the device and
module will get free as well.

Because of this bug in freeing devices, their sysfs directories were not
getting removed properly and after a manifest is parsed with the help of
gbsim, removing modules was creating problems. The sysfs directory
'greybus' wasn't getting removed. And inserting the modules again
resulted in warnings and insmod failure.

WARNING: CPU: 3 PID: 4277 at
/build/buildd/linux-3.13.0/fs/sysfs/dir.c:486
sysfs_warn_dup+0x86/0xa0()

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Initial I2S definitions
Mark Greer [Tue, 31 Mar 2015 23:49:56 +0000 (16:49 -0700)]
greybus: Initial I2S definitions

These are definitions from Mark that I've consolidated into
one header file. I'd like to get these merged at some point
soon, so the audio driver and gbsim work can avoid having
out-of-tree dependencies.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Documentation/sysfs: add a proposed sysfs tree for greybus
Greg Kroah-Hartman [Sat, 4 Apr 2015 08:54:25 +0000 (10:54 +0200)]
greybus: Documentation/sysfs: add a proposed sysfs tree for greybus

This adds a proposed sysfs layout for greybus to Documentation to make
it easier for people to discuss / test things.  It includes a module, an
interface, a bundle, and a gpbridge binding to that bundle.

This was discussed on the projectara software mailing list.

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: reduce the ranting
Alex Elder [Fri, 27 Mar 2015 02:25:08 +0000 (21:25 -0500)]
greybus: reduce the ranting

Cut out some comments that are no longer operative.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
9 years agogreybus: kernel_ver.h: add sysfs_create_groups() and sysfs_remove_groups()
Greg Kroah-Hartman [Tue, 31 Mar 2015 23:36:23 +0000 (01:36 +0200)]
greybus: kernel_ver.h: add sysfs_create_groups() and sysfs_remove_groups()

These functions showed up in 3.12 or so, and we are stuck on 3.10 for
various reasons, so provide backports in kernel_ver.h so that we can
rely on these functions.

Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
9 years agogreybus: loopback: use the attribute groups, not group
Greg Kroah-Hartman [Tue, 31 Mar 2015 21:02:34 +0000 (23:02 +0200)]
greybus: loopback: use the attribute groups, not group

We should use the attribute groups, not group, for the device, so
add and remove it.  No one should ever be updating a sysfs group for a
device, as that can be pretty dangerous if you don't duplicate _all_
existing attribute for that device, and I don't think we were doing that
here.

Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
9 years agogreybus: loopback: fix build breakage about SZ_4K
Greg Kroah-Hartman [Tue, 31 Mar 2015 21:01:45 +0000 (23:01 +0200)]
greybus: loopback: fix build breakage about SZ_4K

x86 doesn't include SZ_4K somehow so explicitly include <linux/sizes.h>
to fix the build breakage.

Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
9 years agogreybus: Add loopback protocol
Alexandre Bailon [Tue, 31 Mar 2015 07:51:59 +0000 (09:51 +0200)]
greybus: Add loopback protocol

Add a simple Greybus protocol in order to stress USB and Greybus.
This protocol currently support 2 requests: ping and transfer.

ping request is useful to measure latency.
Kernel send a ping request and firmware should respond with a ping.

The transfer request request is useful to stress Greybus and USB.
Kernel can send data from 0 to 4k and the firmware must send back the data to kernel.

This behaviour of gb-loopback module is controlled via sysfs.
Curently, connection sysfs folder is updated with new entries:
- type: Type of loopback message to send
  * 0 => Don't send message
  * 1 => Send ping message continuously (message without payload)
  * 2 => Send transer message continuously (message with payload)
- size: Size of transfer message payload: 0-4096 bytes
- ms_wait: Time to wait between two messages: 0-1024 ms

Module also export some statistics about connection:
- latency: Time to send and receive one message
- frequency: Number of packet sent per second on this cport
- throughput: Quantity of data sent and received on this cport
- error
All this statistics are cleared everytime type, size or ms_wait entries are updated.

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
9 years agogreybus: es2: test apb1_log_task safely
Alex Elder [Fri, 27 Mar 2015 20:20:49 +0000 (15:20 -0500)]
greybus: es2: test apb1_log_task safely

When usb_log_enable() is called, the global apb1_log_task is used to
hold the result of kthread_run().  It is possible for kthread_run()
to return an error pointer, so tests of apb_log_task against NULL
are insufficient to determine its validity.

Note that kthread_run() never returns NULL so we don't have to check
for that.  But apb1_log_task is initially NULL, so that global must
be both non-null and not an error in order to be considered valid.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>