OSDN Git Service

android-x86/kernel.git
9 years agogreybus: es2.c: create dedicated struct for cport_in and cport_out
Alexandre Bailon [Mon, 15 Jun 2015 16:08:12 +0000 (18:08 +0200)]
greybus: es2.c: create dedicated struct for cport_in and cport_out

Instead of keep cport buffers, urbs and endpoints in es1_ap_dev,
move them in two dedicated struct (es1_cport_in and es1_cport_out),
in order to ease the migration to es2 (increase the number of endpoint).

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es2.c: Don't use magic value for USB control request
Alexandre Bailon [Mon, 15 Jun 2015 16:08:11 +0000 (18:08 +0200)]
greybus: es2.c: Don't use magic value for USB control request

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es1.c: Don't use magic value for USB control request
Alexandre Bailon [Mon, 15 Jun 2015 16:08:10 +0000 (18:08 +0200)]
greybus: es1.c: Don't use magic value for USB control request

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: clean up properly when parsing bundles
Alex Elder [Fri, 12 Jun 2015 15:21:12 +0000 (10:21 -0500)]
greybus: manifest: clean up properly when parsing bundles

Currently, if an error occurs creating a bundle, we simply
return an error without cleaning up any of the bundles that
had already been successfully set up.

Add code to destroy bundles that have been created in the event
an error occurs.  Add a check to ensure the interface's list of
bundles was empty before parsing for bundles begins.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: fix gb_bundle_destroy()
Alex Elder [Fri, 12 Jun 2015 15:21:11 +0000 (10:21 -0500)]
greybus: bundle: fix gb_bundle_destroy()

Currently gb_bundle_destroy() takes an interface as an argument,
and really doesn't do what a function by that name should do.

What it now does is delete all bundles associated with a given
interface.  What it should do is destroy a single bundle.

Move the looping logic out of gb_bundle_destroy() and into its
caller, gb_interface_destroy().  Pass each bundle in an interface to
gb_bundle_destroy(), which will do what's required to destroy a
single bundle (including removing it from its interface's bundle
list under protection of the lock).

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: refactor gb_bundle_find()
Alex Elder [Fri, 12 Jun 2015 15:21:10 +0000 (10:21 -0500)]
greybus: bundle: refactor gb_bundle_find()

Rearrange gb_bundle_find() so it follows the pattern used by
gb_connection_find().

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: clean up properly when parsing cports
Alex Elder [Fri, 12 Jun 2015 15:21:09 +0000 (10:21 -0500)]
greybus: manifest: clean up properly when parsing cports

Currently, if an error occurs creating a connection, we simply
return an error without cleaning up any of the connections that
had already been successfully set up.

Add code to destroy connections that have been created in the event
an error occurs.  Add a check to ensure the bundle's list of
connections was empty before parsing for CPorts begins.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: un-abstract host cport id allocation
Alex Elder [Fri, 12 Jun 2015 15:21:08 +0000 (10:21 -0500)]
greybus: connection: un-abstract host cport id allocation

I did this recently for the endo id allocation code.

It's clearer now that the allocation of a CPort ID to use for
the AP side of a connection is not very complicated, and it
happens in a pretty controlled environment.  The functions that
abstract getting and releasing those ids don't really add that
much value.

This patch removes gb_connection_hd_cport_id_alloc() and
gb_connection_hd_cport_id_free(), and just open-codes their
activity in the few places they are called.

It is obvious now that the CPort ID allocation isn't done in
atomic context, so we can change the ida_simple_get() call to
use GFP_KERNEL.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: drop unneeded gb_protocol_put() calls
Alex Elder [Fri, 12 Jun 2015 15:21:07 +0000 (10:21 -0500)]
greybus: connection: drop unneeded gb_protocol_put() calls

Although a connection records its protocol id when it gets
created, its protocol handler doesn't actually get assigned
until gb_connection_bind_protocol() is called.

In gb_connection_create() there are some error paths in
which a reference to the connection's protocol is released
before the protocol handler has been associated with the
connection.

Get rid of those calls.

As a result, we will never pass a null protocol pointer to
gb_protocol_put().  Add a precautionary warning in that
function in the event that ever occurs.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: remove extra kfree() call
Alex Elder [Fri, 12 Jun 2015 15:21:06 +0000 (10:21 -0500)]
greybus: connection: remove extra kfree() call

When an error occurs in the device_add() call for a connection, the
device reference is dropped as required.  Because that's the device's
only reference, that will also lead to gb_connection_release() being
called, which frees the connection structure.

Right now we're then making an extra request to free the connection,
which is wrong.  Fix that.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: fix the clean up while uart initiates connection unsucessfully
Phong Tran [Wed, 10 Jun 2015 14:03:17 +0000 (21:03 +0700)]
greybus: uart: fix the clean up while uart initiates connection unsucessfully

There is lack of unregister and free the tty driver.
This patch fixes it.

Signed-off-by: Phong Tran <tranmanphong@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: remove __init from .h files
Greg Kroah-Hartman [Thu, 11 Jun 2015 16:22:51 +0000 (09:22 -0700)]
greybus: remove __init from .h files

__init does not belong in a .h file, as it does not do anything there,
so remove all instances of it.

Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: Fix compilation warning
Viresh Kumar [Thu, 11 Jun 2015 11:09:42 +0000 (16:39 +0530)]
greybus: endo: Fix compilation warning

WARNING: /home/viresh/work/repos/ara/greybus/greybus.o(.init.text+0xb8):
Section mismatch in reference from the function init_module() to the
function .exit.text:gb_endo_exit()

The function __init init_module() references
a function __exit gb_endo_exit().

Fix it by removing __exit from endo_exit().

Fixes: cf64356c5151 ("endo: define endo_init() and endo_exit()")
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: check for duplicate cport ids
Alex Elder [Tue, 9 Jun 2015 22:42:58 +0000 (17:42 -0500)]
greybus: connection: check for duplicate cport ids

Check at connection creation time for an attempt to create a
connection with an interface CPort ID that's the same as one that's
already been created.

Define a new helper function to look for such a duplicate.  The
check for a duplicate is only performed at initialization time,
and CPorts are initialized serially for each bundle, so there's
no need to acquire the list lock for this search.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: bundle: check for duplicate bundle ids
Alex Elder [Tue, 9 Jun 2015 22:42:57 +0000 (17:42 -0500)]
greybus: bundle: check for duplicate bundle ids

Check at bundle creation time to ensure we're not creating a bundle
with an id that's the same as one that's already been created.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: rework bundle parsing
Alex Elder [Tue, 9 Jun 2015 22:42:56 +0000 (17:42 -0500)]
greybus: manifest: rework bundle parsing

Rework the the code that parses the manifest for bundles so it only
touches each manifest descriptor once.  (Previously the list was
scanned from the beginning repeatedly until all bundles were found.)
Shorten the name of the descriptor variable, to avoid line wrap.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: rework cport parsing
Alex Elder [Tue, 9 Jun 2015 22:42:55 +0000 (17:42 -0500)]
greybus: manifest: rework cport parsing

Rework the the code that parses the manifest for CPorts associated
with a bundle so it only touches each manifest descriptor once.
(Previously the list was scanned from the beginning repeatedly
until all bundle CPorts were found.)  Shorten the name of the
descriptor variable, to avoid line wrap.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: use bundle's embedded interface pointer
Alex Elder [Tue, 9 Jun 2015 22:42:54 +0000 (17:42 -0500)]
greybus: manifest: use bundle's embedded interface pointer

An initialized bundle structure contains a pointer to its
interface.  Because of this there's no need to provide
the interface pointer to gb_manifest_parse_cports().  This
also precludes the possibility of passing a bad interface
pointer.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: manifest: really minor cleanups
Alex Elder [Tue, 9 Jun 2015 22:42:53 +0000 (17:42 -0500)]
greybus: manifest: really minor cleanups

This patch incorporates some very small cleanups to "manifest.c":
    - Rearrange code a bit in gb_manifest_parse() that ensures a
      manifest is big enough to hold a header.  If the manifest is
      exactly the size of a header, the error reported will now be
      "...must have 1 interface..." rather than "short manifest".
    - Fix the function comment for gb_manifest_parse_cports().
    - Use "an interface," not "a interface," and don't capitalize.
    - Delete some braces when getting interface product string.
    - A few other minor changes to comments and white space.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: clean up id assignment code
Alex Elder [Tue, 9 Jun 2015 22:42:52 +0000 (17:42 -0500)]
greybus: endo: clean up id assignment code

Recently code was added (back) to assign a unique id to each
endo, so satisfy uniqueness requirements of the Linux device
subsystem.  An ID allocator is used to manage the space of IDs.

Now that we have gb_endo_init(), we can initialize the map there,
and fully hide the ID map within "endo.c".

The original functions gb_endo_id_alloc() and gb_endo_id_free()
provided a nice abstract interface, but the direct ID allocation
calls are quite simple, so just call them directly.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: define endo_init() and endo_exit()
Alex Elder [Tue, 9 Jun 2015 22:42:51 +0000 (17:42 -0500)]
greybus: endo: define endo_init() and endo_exit()

Define init and exit functions to do one-time setup and teardown
of endo-related functionality.  Currently they're place holders;
the next patch will populate them.

Note that we now call gb_operation_exit() from gb_init(), so
we can no longer mark that function with __exit.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: tag core init and exit functions
Alex Elder [Tue, 9 Jun 2015 22:42:50 +0000 (17:42 -0500)]
greybus: tag core init and exit functions

The top-level functions gb_init() and gb_exit() are tagged with
__init and __exit, respectively.  These functions call a few
other functions that are similarly used only at initialization
and termination time.  So mark those functions accordingly.

Note that, because gb_ap_exit() and gb_debugfs_cleanup()
are called by gb_init() in error paths, these functions
cannot be declared with the __exit attribute.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: drop some unnecessary headers
Alex Elder [Tue, 9 Jun 2015 22:42:49 +0000 (17:42 -0500)]
greybus: drop some unnecessary headers

There's no need to include anything other than "greybus.h" in
"connection.c".  Same thing in "core.c" and "manifest.c" and
"svc.c".  Some files need headers included, but most come along
with "greybus.h".

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Reset sample count when CPort deactivated
Mark Greer [Tue, 9 Jun 2015 22:29:35 +0000 (15:29 -0700)]
greybus: gb-audio: Reset sample count when CPort deactivated

The sample count placed in Greybus I2S audio messages should be
reset every time a new audio stream is set up.  However, the
current code does not do the reset so make it so it does.

Signed-off-by: Mark Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: es?: decrease buffer size to 2k
Greg Kroah-Hartman [Tue, 9 Jun 2015 20:47:48 +0000 (13:47 -0700)]
greybus: es?: decrease buffer size to 2k

The firmware is having a hard time with 4k buffers and memory
allocation, so decrease the size on the host side to 2k.  Also move away
from using PAGE_SIZE to denote 4k as that's not the case on all
architectures, and someone, someday, might get a rude surprise.

Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: remove the redundant unregister chrdev
Phong Tran [Tue, 9 Jun 2015 13:28:18 +0000 (20:28 +0700)]
greybus: uart: remove the redundant unregister chrdev

The unregister_chrdev_region() does twice here.
The chrdev region was unregistered
inside tty_unregister_driver().

Signed-off-by: Phong Tran <tranmanphong@gmail.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: move endo id map declaration to endo.h
Phong Tran [Tue, 9 Jun 2015 13:28:17 +0000 (20:28 +0700)]
greybus: endo: move endo id map declaration to endo.h

There is a sparse warning. The endo id map is also
used in endo.c. Should define in endo.h

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: Tear down devices in the reverse order
Viresh Kumar [Thu, 4 Jun 2015 12:46:45 +0000 (18:16 +0530)]
greybus: Tear down devices in the reverse order

Normally, its a good practice to free resources in the reverse order in
which they are allocated, so that all the dependencies can be sorted out
properly.

This is true while creating/destroying devices as well. For example
consider this scenario (I faced a crash with control protocol due to
this). For a new module, we will first create a bundle+connection for
the control cport and then create other bundles/connections after
parsing manifest.

And while destroying interface on module hot unplug, we are removing the
devices in the order they are added. And so the bundle/connection for
the control cport are destroyed first. But, control cport was still
required while destroying other bundles/connections.

To solve this problem, lets destroy the resources in the reverse order
in which they are added.

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: clean up a few pr_err() calls
Alex Elder [Mon, 8 Jun 2015 17:05:14 +0000 (12:05 -0500)]
greybus: manifest: clean up a few pr_err() calls

Provide a little more information in two pr_err() calls.
Also enclose a reported condition in parentheses, to match
the style used everywhere else in the file.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: core: rename greybus_deregister()
Alex Elder [Mon, 8 Jun 2015 17:05:13 +0000 (12:05 -0500)]
greybus: core: rename greybus_deregister()

Rename greybus_deregister() to be greybus_deregister_driver(), so
its name mirrors the greybus_register_driver() function it matches.
Define greybus_deregister() to be a trivial macro.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: properly interpret receive data size
Alex Elder [Mon, 8 Jun 2015 17:05:12 +0000 (12:05 -0500)]
greybus: uart: properly interpret receive data size

In gb_uart_request_recv(), the receive data size is in little-endian
format.  Do the proper byte swapping of that value before using it.
Found by "make check".

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: connection: make gb_connection_hd_find() private
Alex Elder [Mon, 8 Jun 2015 17:05:11 +0000 (12:05 -0500)]
greybus: connection: make gb_connection_hd_find() private

Give gb_connection_hd_find() static scope; it's never used
outside "connection.c".

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: driver is basic to Greybus (not GP Bridge)
Alex Elder [Mon, 8 Jun 2015 17:05:10 +0000 (12:05 -0500)]
greybus: svc: driver is basic to Greybus (not GP Bridge)

The SVC protocol driver should have been defined as a basic
Greybus protocol driver, not a GP Bridge protocol driver.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Prefix module-id with endo id
Viresh Kumar [Sun, 7 Jun 2015 03:43:16 +0000 (09:13 +0530)]
greybus: Prefix module-id with endo id

Prefix module-id with endo-id to uniquely identify it for the entire
kernel.

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: Generate greybus wide unique ids for endo devices
Viresh Kumar [Sun, 7 Jun 2015 03:43:15 +0000 (09:13 +0530)]
greybus: Generate greybus wide unique ids for endo devices

Currently we name the endo device as "endo". And it shows up with the
same name in sysfs directory: /sys/bus/greybus/devices/.

But each device in kernel should be represented by a unique id in
kernel, and "endo" isn't unique.

Lets generate unique ids for endo devices. The ida mechanism for
allocating ids may be overkill but it works.

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: s/bundle_cport_id/intf_cport_id
Viresh Kumar [Thu, 4 Jun 2015 04:48:01 +0000 (10:18 +0530)]
greybus: s/bundle_cport_id/intf_cport_id

This isn't unique just for the bundle but the complete interface. Its
wrong to call it bundle_cport_id. Lets name it intf_cport_id to make
things clear.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: operation: Remove unused variable 'buffer'
Viresh Kumar [Thu, 4 Jun 2015 04:28:21 +0000 (09:58 +0530)]
greybus: operation: Remove unused variable 'buffer'

'buffer' isn't used in this function, remove it.

Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
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: uart: Remove magic numbers make struct gb_tty variable names consistent
Bryan O'Donoghue [Tue, 2 Jun 2015 12:40:51 +0000 (13:40 +0100)]
greybus: uart: Remove magic numbers make struct gb_tty variable names consistent

Use defines for the data format command.
Tidy up naming of gb_tty variables.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: Add gb_uart_request_recv for receiving async UART data
Bryan O'Donoghue [Tue, 2 Jun 2015 12:40:50 +0000 (13:40 +0100)]
greybus: uart: Add gb_uart_request_recv for receiving async UART data

gb_uart_request_recv job in life is to process unsolicited greybus
mesages from the UART.
Hook the incoming UART data and pass to the TTY layer.
Line-state changes still TBD.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: kmalloc for send_data once only
Bryan O'Donoghue [Tue, 2 Jun 2015 12:40:49 +0000 (13:40 +0100)]
greybus: uart: kmalloc for send_data once only

Make kmalloc for the send buffer a one time alloc based on the MTU for
a given greybus link.

The write_room for an gb_operation_sync then will be the size of the
buffer we use for a single operation.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: send_data should return size or error
Bryan O'Donoghue [Tue, 2 Jun 2015 12:40:48 +0000 (13:40 +0100)]
greybus: uart: send_data should return size or error

gb_operation_sync returns 0 on success but the calling function
expects the number of bytes written on success or a negative errno

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: Update uart.c to register tty ports
Bryan O'Donoghue [Tue, 2 Jun 2015 12:40:47 +0000 (13:40 +0100)]
greybus: uart: Update uart.c to register tty ports

For each new UART connection we need to do a tty_port_init else
we'll crash when trying to access the tty mutex later on.
Base the TTY major/minor numbers on non-zero values.
Supply an empty operations structure for the newly regitered port.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: Reduce UART count from 255 to 16
Bryan O'Donoghue [Tue, 2 Jun 2015 12:40:46 +0000 (13:40 +0100)]
greybus: uart: Reduce UART count from 255 to 16

Arbitrary number 255 is both not aligned and probably too big.
Move the UART count down to 16 which is still large but, more realistic.
8 may be too few for future testing setups, 16 should accomodate any.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: Tidy naming convention to more closely match spec
Bryan O'Donoghue [Tue, 2 Jun 2015 12:40:45 +0000 (13:40 +0100)]
greybus: uart: Tidy naming convention to more closely match spec

Update tabs and naming of structures to match the naming used in the greybus
specification more closely.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: Move UART protocol structs/defines to greybus_protocols.h
Bryan O'Donoghue [Tue, 2 Jun 2015 12:40:44 +0000 (13:40 +0100)]
greybus: uart: Move UART protocol structs/defines to greybus_protocols.h

gbsim depends on the structures and defines in greybus_protocols.h
generally in order to simulate firmware. Move UART defines into this
header to facilitate.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: uart: Fix the memory leak in connection init
Phong Tran [Mon, 1 Jun 2015 15:19:45 +0000 (22:19 +0700)]
greybus: uart: Fix the memory leak in connection init

If alloc minor is error, gb_tty should free.

Signed-off-by: Phong Tran <tranmanphong@gmail.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: Add missing '\n' sprintf() for sysfs files
Viresh Kumar [Mon, 1 Jun 2015 12:13:36 +0000 (17:43 +0530)]
greybus: endo: Add missing '\n' sprintf() for sysfs files

Because of the missing '\n', this is how the output of reading endo
sysfs files looks:

root# cat /sys/bus/greybus/devices/endo/id
0x4755root#

Fix it by including \n to the end of the printed string.

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: gpio: add irq-type defines
Johan Hovold [Thu, 28 May 2015 17:03:34 +0000 (19:03 +0200)]
greybus: gpio: add irq-type defines

Add Greybus GPIO IRQ-type defines rather than rely on the current
Linux implementation.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: remove unused debounce define
Johan Hovold [Thu, 28 May 2015 17:03:33 +0000 (19:03 +0200)]
greybus: gpio: remove unused debounce define

Remove unused debounce define from protocol header.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: delete "0xXXXX" portion in sysfs "endo" directory
Alex Elder [Wed, 27 May 2015 16:17:53 +0000 (11:17 -0500)]
greybus: endo: delete "0xXXXX" portion in sysfs "endo" directory

With the Endo "id" attribute in place, there's no need to encode
the ID of an Endo in its sysfs path.  So get rid of it.

Signed-off-by: Alex Elder <elder@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: drop redundant prefixes from sysfs basenames
Alex Elder [Wed, 27 May 2015 16:17:52 +0000 (11:17 -0500)]
greybus: endo: drop redundant prefixes from sysfs basenames

This commit:
    7e761e2 endo: rework some attributes
added a new "endo_id" attribute, located under a new "Endo"
directory in sysfs.  The resulting path looks like:
    Documentation/sysfs/endo-TYPE/Endo/endo_id
There's no need to have a separate "Endo" subdirectory to contain
Endo-specific attributes.

That commit also added "svc_" to some other paths related to the
SVC, like:
    Documentation/sysfs/endo-TYPE/SVC/svc_version
The additional "svc_" is redundant.

This patch retouches those paths a bit, mainly to remove some
redundancy.  It also makes the pathname components all lower case.
As a result, the above two paths now look like:
    Documentation/sysfs/endo-TYPE/id
    Documentation/sysfs/endo-TYPE/svc/version

All other Endo sysfs files are updated similarly.

Signed-off-by: Alex Elder <elder@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: update sysfs documentation files
Alex Elder [Wed, 27 May 2015 16:17:51 +0000 (11:17 -0500)]
greybus: update sysfs documentation files

Impose a few editorial conventions on the Greybus-related sysfs
files under "Documentation".
    - Capitalize "Endo" (except in path names)
    - Capitalize "ID" (except in path names)
    - Use "..." to indicate unspecified path components (because
      ".." means something else).
    - Add the "0x" prior to the "XXXX" representing the Endo ID.

Signed-off-by: Alex Elder <elder@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: add documentation for Endo sysfs files
Alex Elder [Wed, 27 May 2015 16:17:50 +0000 (11:17 -0500)]
greybus: add documentation for Endo sysfs files

Update the files documenting Greybus-related sysfs files under
Documentation/ to reflect the addition of the two recently-added
Endo attributes.

Signed-off-by: Alex Elder <elder@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: audio: Remove the MODULE_LICENSE()
Phong Tran [Thu, 28 May 2015 16:21:01 +0000 (23:21 +0700)]
greybus: audio: Remove the MODULE_LICENSE()

This is not a kernel module. It should not use
the module license macro.

Signed-off-by: Phong Tran <tranmanphong@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: audio: Fix typo for macro I2S data version minor
Phong Tran [Thu, 28 May 2015 16:21:00 +0000 (23:21 +0700)]
greybus: audio: Fix typo for macro I2S data version minor

This macro should be DATA not MGMT.

Signed-off-by: Phong Tran <tranmanphong@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: greybus_protocols: fix guard tag
Alex Elder [Wed, 27 May 2015 19:45:58 +0000 (14:45 -0500)]
greybus: greybus_protocols: fix guard tag

I neglected to update the "#ifndef/#define" when I renamed
"greybus_protocols.h".  Fix that.

Signed-off-by: Alex Elder <elder@linaro.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: update operation types
Johan Hovold [Wed, 27 May 2015 10:45:07 +0000 (12:45 +0200)]
greybus: gpio: update operation types

Update the remaining operation types now that the ack operation is gone
to avoid leaving a hole in the type definitions.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Merge branch 'master' of github.com:gregkh/greybus
Greg Kroah-Hartman [Thu, 28 May 2015 21:02:02 +0000 (14:02 -0700)]
greybus: Merge branch 'master' of github.com:gregkh/greybus

9 years agogreybus: svc: use macro for init and exit protocol
Phong Tran [Wed, 27 May 2015 14:31:03 +0000 (21:31 +0700)]
greybus: svc: use macro for init and exit protocol

Change to gb_gpbridge_protocol_driver for
making the consitent with other drivers.

Signed-off-by: Phong Tran <tranmanphong@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: svc: Fix endian of hotplug request data
Phong Tran [Wed, 27 May 2015 14:31:02 +0000 (21:31 +0700)]
greybus: svc: Fix endian of hotplug request data

data of hotplug request should exchange to native
CPU format before assignment.

Signed-off-by: Phong Tran <tranmanphong@gmail.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: fix interrupt protocol
Johan Hovold [Tue, 26 May 2015 13:29:25 +0000 (15:29 +0200)]
greybus: gpio: fix interrupt protocol

The current interrupt implementation uses the simple irq-flow handler,
which means that the interrupt subsystem makes no irq-chip callbacks
when handling an interrupt. Specifically, no end-of-interrupt message is
sent when the threaded handler has run. This means that we may currently
re-enable an interrupt before it has been serviced (i.e. the irq-event
operation may complete before the threaded handler has run).

The simple flow handler also silently drops a second interrupt arriving
while a handler is running. This means that we may lose a second edge
interrupt with the current firmware.

Switch to a new one-shot interrupt protocol, where the primary handler
(firmware) always masks and acks an interrupt before sending an event to
the AP. The AP is responsible for unmasking the interrupt when it has
been handled. By having the firmware ack an edge interrupt before
sending the event, a second edge interrupt will no longer get lost.

This one-shot protocol can be implemented in the kernel by using the
level irq-flow handler, one-shot interrupts with threaded handlers and
bus-lock synchronisation for slow buses. Note that the same flow handler
is used for both edge and level interrupts.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: fix atomic sleep when using interrupts
Johan Hovold [Tue, 26 May 2015 13:29:24 +0000 (15:29 +0200)]
greybus: gpio: fix atomic sleep when using interrupts

The irq-chip callbacks are made in atomic context where we must not do
any synchronous greybus operations.

Fix the current gpio-interrupt implementation by using the bus-lock
functionality provided by the irq subsystem.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: rename irq mask and unmask callbacks
Johan Hovold [Tue, 26 May 2015 13:29:23 +0000 (15:29 +0200)]
greybus: gpio: rename irq mask and unmask callbacks

Rename irq mask and unmask functions to match the callback names.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: use irq-domain lookups
Johan Hovold [Tue, 26 May 2015 13:29:22 +0000 (15:29 +0200)]
greybus: gpio: use irq-domain lookups

Use irq_find_mapping directly rather than go through the legacy gpio
interface.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: don't call irq-flow handler directly
Johan Hovold [Tue, 26 May 2015 13:29:21 +0000 (15:29 +0200)]
greybus: gpio: don't call irq-flow handler directly

Use generic_handle_irq_desc rather than call a hardcoded irq-flow
handler directly.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: remove unused irq-ack operation
Johan Hovold [Tue, 26 May 2015 13:29:20 +0000 (15:29 +0200)]
greybus: gpio: remove unused irq-ack operation

Remove unused irq-ack operation, which has never been called and does
not make sense for message-signalled interrupts over slow buses.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpio: fix debugfs output
Johan Hovold [Tue, 26 May 2015 13:29:19 +0000 (15:29 +0200)]
greybus: gpio: fix debugfs output

Fix debugfs output by removing the unimplemented, custom dbg_show
callback. The default implementation is perfectly sufficient.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: operation: add support for incoming unidirectional operations
Johan Hovold [Tue, 26 May 2015 13:29:18 +0000 (15:29 +0200)]
greybus: operation: add support for incoming unidirectional operations

Add support for incoming, unidirectional operations where the sender of
a request does not care about a response.

Unidirectional operations have an operation id of 0.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: Merge branch 'master' of github.com:gregkh/greybus
Greg Kroah-Hartman [Tue, 26 May 2015 15:39:33 +0000 (08:39 -0700)]
greybus: Merge branch 'master' of github.com:gregkh/greybus

9 years agogreybus: introduce SVC protocol
Alex Elder [Fri, 22 May 2015 18:02:08 +0000 (13:02 -0500)]
greybus: introduce SVC protocol

This patch adds support for the Greybus SVC protocol.  We may want
to rearrange protocol numbers at some point, since this is a pretty
fundamental protocol.

Note:  It has only been compile tested; no SVC CPorts have yet been
defined, so this code is not yet exercised.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: update copyrights
Alex Elder [Fri, 22 May 2015 17:59:16 +0000 (12:59 -0500)]
greybus: update copyrights

Update the copyright statements for recently-modified source files.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: add copyright statements
Alex Elder [Fri, 22 May 2015 17:59:15 +0000 (12:59 -0500)]
greybus: add copyright statements

The Greybus audio source files included no copyright statements.
Add them.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: core: don't set up endo until host device is initialized
Alex Elder [Fri, 22 May 2015 17:56:49 +0000 (12:56 -0500)]
greybus: core: don't set up endo until host device is initialized

Currently, the data structure representing an Endo is set up at the
time a host device gets created.  This is too early.

Once the control infrastructure is in place, there's no sense in
setting up the Endo utnil after we have heard from the SVC via a
probe operation on our control CPort.  And even then, there's
no real point until we've successfully authenticated with the SVC,
which will be indicated by the arrival of the Control protocol
"connected" operation request notifying us that our SVC CPort
is operational.

In addition to this logical argument, we also can't actually
receive any messages on the Control CPort until the host device
is set up and ready to receive messages.  At the point we're
currently setting up the Endo data structure, that has not yet
been done.

Define a new exported function greybus_endo_setup(), which will
be used (for now) as the entry point for setting up the Endo
data structure.  Arrange to call it in the host USB driver
probe method, *after* we are set up for handling messages.

Note: Once the control protocol has been implemented, this function
may no longer need to be exported.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: record AP interface id
Alex Elder [Fri, 22 May 2015 17:56:48 +0000 (12:56 -0500)]
greybus: endo: record AP interface id

The AP resides in a particular position on an Endo, which is
identified by an interface ID.  (For now we'll assume the AP uses
just one interface.)  Record the this AP interface ID when creating
an Endo.  Add a sysfs attribute to display it as well.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: rework some attributes
Alex Elder [Fri, 22 May 2015 17:56:47 +0000 (12:56 -0500)]
greybus: endo: rework some attributes

The SVC is not the same as the Endo.  There are some attributes
(such as the Endo ID) that are independent of attributes of
the SVC (like its version).

The current "Endo attributes" are really SVC attributes.
Rename a few functions and variables to reflect that.

Add a new attribute group for Endo-specific attributes, and
populate it with the Endo ID.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: encapsulate computing the max interface id
Alex Elder [Fri, 22 May 2015 17:56:46 +0000 (12:56 -0500)]
greybus: endo: encapsulate computing the max interface id

The maximum interface id on an Endo is the result of a non-trivial
calculation.  It'll be needed for an upcoming patch, so create a
macro to compute it.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: rename "gpbridge.h"
Alex Elder [Fri, 22 May 2015 17:35:32 +0000 (12:35 -0500)]
greybus: rename "gpbridge.h"

The file "gpbridge.h" is now used as a single place to define
all protocol message structures.  These protocols are not
necessarily related to the GP bridge, so the name of the
file is misleading.

Rename it "greybus_protocols.h".

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: include "gpbridge.h" from "greybus.h"
Alex Elder [Fri, 22 May 2015 17:35:31 +0000 (12:35 -0500)]
greybus: include "gpbridge.h" from "greybus.h"

Avoid the need for all the source files to include "gpbridge.h"
by just having "greybus.h" include it.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: core: return error code when creating host device
Alex Elder [Fri, 22 May 2015 14:52:45 +0000 (09:52 -0500)]
greybus: core: return error code when creating host device

Return a pointer-coded error from greybus_create_hd() rather
than NULL in the event an error occurs.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: core: return error code when creating endo
Alex Elder [Fri, 22 May 2015 14:52:44 +0000 (09:52 -0500)]
greybus: core: return error code when creating endo

Return a pointer-coded error from gb_endo_create() rather than just
a null pointer in the event an error occurs.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: pass endo_id to gb_endo_create()
Alex Elder [Fri, 22 May 2015 14:52:43 +0000 (09:52 -0500)]
greybus: endo: pass endo_id to gb_endo_create()

We are going to want to defer creating the endo until we receive a
probe operation from the SVC, which will supply the endo id.  Change
gb_endo_create() so it passes the endo_id value as an argument.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: endo: rename gb_svc
Alex Elder [Fri, 22 May 2015 14:52:42 +0000 (09:52 -0500)]
greybus: endo: rename gb_svc

Change the name of "struct gb_svc" to be "struct svc_info".  The
structure now contains only the SVC's serial number and version (and
are place holders anyway).  We will be defining a structure that
represents the SVC for the SVC protocol connection, and I want to
take back that name.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Set samples per message during init
Mark A. Greer [Thu, 21 May 2015 22:57:04 +0000 (15:57 -0700)]
greybus: gb-audio: Set samples per message during init

A recent commit moved the I2S samples per message operation
to the PCM's 'hw_params' callback.  However, the 'hw_params'
callback is called numerous times while the samples per
message need only be done once (or seldom).  Eliminate the
unnecessary samples per message operations by doing it only
once at Greybus protocol init time.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Set I2S Configuration according to ASOC requests
Mark A. Greer [Thu, 21 May 2015 22:57:03 +0000 (15:57 -0700)]
greybus: gb-audio: Set I2S Configuration according to ASOC requests

Currently, the audio driver unconditionally sets the I2S
configuration to have a sample rate of 48KHz, two channels,
16 bits per channel, in little endian order.  Make this
more flexible by setting the I2S configuration according to
the arguments passed to the PCM 'hw_params' callback.

To accomplish this, query for the supported I2S configurations
at Greybus protocol init time and save them in the 'snd_dev'
structure.  When the 'hw_params' callback is called, compare its
arguments to the table of supported configurations.  If there is
a match, set the I2S connection accordingly.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Activate TX connection Bundle CPort ID
Mark A. Greer [Thu, 21 May 2015 22:57:02 +0000 (15:57 -0700)]
greybus: gb-audio: Activate TX connection Bundle CPort ID

Currently, the audio driver activates & deactivates a predefined
CPort ID but that can vary depending on the manifest data of the
module.  Instead, use the TX connection's Bundle CPort ID which
contains the correct CPort ID.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Activate TX CPort in PCM workqueue
Mark A. Greer [Thu, 21 May 2015 22:57:01 +0000 (15:57 -0700)]
greybus: gb-audio: Activate TX CPort in PCM workqueue

Currently, the I2S TX CPort is configured and activated during
the Greybus audio initialization.  Unfortunately, this prevents
the audio driver from ever changing the I2S configuration.

To allow the I2S configuration to change according to ASOC requests,
move the CPort activation & deactivation to the audio-pcm workqueue.
Now, when audio is running but the CPort is not active, it will be
activated.  When audio is not running and the CPort is active, it
will be deactivated.

This has the side-effect of sending the first piece of audio data
immediately after activating the CPort which is really how it should
work anyway.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Remove useless comment
Mark A. Greer [Thu, 21 May 2015 22:57:00 +0000 (15:57 -0700)]
greybus: gb-audio: Remove useless comment

Remove comment about adding start delay since it will
be done when support for A/V synchronization is added.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Add I2C device for rt5647 codec
Mark A. Greer [Thu, 21 May 2015 22:56:59 +0000 (15:56 -0700)]
greybus: gb-audio: Add I2C device for rt5647 codec

Add the I2C device node for the rt5647 codec.

Eventually, this will be done automatically somewhere
else but for now its done in the audio driver.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: cpu_dai.fmt does not exist in v4.1
Mark A. Greer [Thu, 21 May 2015 22:56:58 +0000 (15:56 -0700)]
greybus: gb-audio: cpu_dai.fmt does not exist in v4.1

The asoc_simple_dai structure does not contain the 'fmt'
member in Linux kernel version v4.1 and later so only
build code that uses it when the kernel version is earlier
than v4.1.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Fix DAI formats and master/slave settings
Mark A. Greer [Thu, 21 May 2015 22:56:57 +0000 (15:56 -0700)]
greybus: gb-audio: Fix DAI formats and master/slave settings

Set the various DAI formats so the bridge on the module
is the master of all clocks and the codec is the slave.
The only DAI protocol currently supported is I2S.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Clean up codec name generation
Mark A. Greer [Thu, 21 May 2015 22:56:56 +0000 (15:56 -0700)]
greybus: gb-audio: Clean up codec name generation

Instead of using the fixed suffix, '6-001b', in the
codec name, generate it from the I2S adapter number
and I2C address of the codec.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Allocate space for 20 configurations
Mark A. Greer [Thu, 21 May 2015 22:54:48 +0000 (15:54 -0700)]
greybus: gb-audio: Allocate space for 20 configurations

The greybus code requires that an operation's response buffer be
the exact size of the response; however, the size of the response to
the GB_I2S_MGMT_TYPE_GET_SUPPORTED_CONFIGURATIONS operation is unknown.
To fix this, an extension to the I2S specification is required.

In the meantime, set the number of configurations returned to 20
because that is how many configurations will be returned (using
"insider knowledge" of the firmware).

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Tested-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gb-audio: Set clock edges to match rt5647 codec requirements
Mark A. Greer [Thu, 21 May 2015 22:54:27 +0000 (15:54 -0700)]
greybus: gb-audio: Set clock edges to match rt5647 codec requirements

The rt5647 codec on speaker and mediabar modules require that
the following clock edge settings:

ll_wclk_change_edge GB_I2S_MGMT_EDGE_FALLING
ll_wclk_tx_edge GB_I2S_MGMT_EDGE_RISING
ll_wclk_rx_edge GB_I2S_MGMT_EDGE_FALLING

(Those are the setting that work, at least).  So make the Greybus
audio driver configure the GPBridge with those settings.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Tested-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: gpbridge: fix section mismatches
Johan Hovold [Thu, 21 May 2015 09:47:24 +0000 (11:47 +0200)]
greybus: gpbridge: fix section mismatches

Fix section mismatches introduced by b27227ce93c0 ("greybus: Use
gb_gpbridge_protocol_init()"), which added __exit annotation to
gpbridge-protocol exit functions that are called in the error path of
gpbridge_init, which lives in the init section.

This triggered the following modpost warning:

WARNING: modpost: Found 8 section mismatch(es).

Fixes: 16b33d100bff ("protocol: Add gb_gpbridge_protocol_driver()")
Fixes: b27227ce93c0 ("greybus: Use gb_gpbridge_protocol_init()")
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: operation: add helper to retrieve max payload size
Johan Hovold [Tue, 19 May 2015 09:22:46 +0000 (11:22 +0200)]
greybus: operation: add helper to retrieve max payload size

Add helper to retrieve the maximum payload size for operations on a
specific connection.

Note that the helper is not inlined due to how the header files are
currently organised, but it is not expected to be called after a
connection has been initialised either.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
9 years agogreybus: core: add lower-limit for host-device buffers
Johan Hovold [Tue, 19 May 2015 09:22:45 +0000 (11:22 +0200)]
greybus: core: add lower-limit for host-device buffers

Make sure we never end up with a host device with maximum buffer size
smaller than the shortest Greybus message.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
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>