Commit graph

902 commits

Author SHA1 Message Date
Alex Elder a6b13eb648 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>
2015-06-10 10:38:23 -07:00
Alex Elder c46839d1cc 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>
2015-06-10 10:38:23 -07:00
Alex Elder d393c98f11 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>
2015-06-10 10:38:23 -07:00
Alex Elder 79dda60987 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>
2015-06-10 10:38:23 -07:00
Alex Elder f35ab903ef 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>
2015-06-10 10:38:23 -07:00
Alex Elder 47ed2c9240 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>
2015-06-10 10:38:23 -07:00
Alex Elder 190241a362 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>
2015-06-10 10:38:23 -07:00
Mark Greer 45f427a02e 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>
2015-06-10 10:35:03 -07:00
Greg Kroah-Hartman cce3103676 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>
2015-06-10 10:35:03 -07:00
Phong Tran 61b65a394c 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>
2015-06-09 13:35:47 -07:00
Phong Tran f2e2b06fef 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>
2015-06-09 13:35:47 -07:00
Viresh Kumar 928f2abd5f 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>
2015-06-09 13:31:23 -07:00
Alex Elder d51c0ffb5c 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>
2015-06-08 15:19:56 -07:00
Alex Elder fd1c2e541c 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>
2015-06-08 15:19:56 -07:00
Alex Elder 81c3a77207 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>
2015-06-08 15:19:56 -07:00
Alex Elder 8bd0ae6e72 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>
2015-06-08 15:19:56 -07:00
Alex Elder 0dac67c84c 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>
2015-06-08 15:19:56 -07:00
Viresh Kumar cf6b62d904 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>
2015-06-08 15:18:02 -07:00
Viresh Kumar 4a04187008 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>
2015-06-08 15:18:02 -07:00
Viresh Kumar d7353ceada 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>
2015-06-04 14:15:29 +09:00
Viresh Kumar 4cfabf09db 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>
2015-06-04 14:15:29 +09:00
Bryan O'Donoghue 62229a1bda 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>
2015-06-04 14:11:05 +09:00
Bryan O'Donoghue 1c087015b9 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>
2015-06-04 14:11:05 +09:00
Bryan O'Donoghue dd1c64ede9 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>
2015-06-04 14:11:05 +09:00
Bryan O'Donoghue 563bd79b2d 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>
2015-06-04 14:08:22 +09:00
Bryan O'Donoghue f95ad78c72 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>
2015-06-04 14:08:22 +09:00
Bryan O'Donoghue f5537d46cb 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>
2015-06-04 14:08:21 +09:00
Bryan O'Donoghue 11fca140c9 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>
2015-06-04 14:05:48 +09:00
Bryan O'Donoghue 4ef53485c3 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>
2015-06-04 14:05:48 +09:00
Phong Tran 55f2291142 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>
2015-06-04 14:04:18 +09:00
Viresh Kumar 3cb494cd6c 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>
2015-06-04 14:02:38 +09:00
Johan Hovold 7ba864a19f 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>
2015-05-28 14:48:30 -07:00
Johan Hovold 4bf3780982 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>
2015-05-28 14:48:14 -07:00
Alex Elder e6cebf8770 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>
2015-05-28 14:45:56 -07:00
Alex Elder 312bb84942 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>
2015-05-28 14:45:56 -07:00
Alex Elder 28e3cedcce 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>
2015-05-28 14:45:56 -07:00
Alex Elder b4dbf1e132 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>
2015-05-28 14:45:20 -07:00
Phong Tran df76422113 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>
2015-05-28 14:38:38 -07:00
Phong Tran bcd8215b49 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>
2015-05-28 14:38:38 -07:00
Alex Elder 012d7d4fbe 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>
2015-05-28 14:04:08 -07:00
Johan Hovold 47bf0b4427 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>
2015-05-28 14:02:13 -07:00
Greg Kroah-Hartman 23bd25a798 greybus: Merge branch 'master' of github.com:gregkh/greybus 2015-05-28 14:02:02 -07:00
Phong Tran b61fa7bce4 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>
2015-05-28 13:58:29 -07:00
Phong Tran ea15a40b32 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>
2015-05-28 13:58:29 -07:00
Johan Hovold 1409c4d6a8 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>
2015-05-26 15:27:39 -07:00
Johan Hovold 25f11ed965 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>
2015-05-26 15:26:08 -07:00
Johan Hovold 0cb918d72d 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>
2015-05-26 15:26:08 -07:00
Johan Hovold ec762115a5 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>
2015-05-26 15:25:17 -07:00
Johan Hovold 2611ebef83 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>
2015-05-26 15:25:17 -07:00
Johan Hovold b8e3ffebac 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>
2015-05-26 15:25:17 -07:00
Johan Hovold c8d1ad8013 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>
2015-05-26 15:25:17 -07:00
Johan Hovold 1d771fe41e 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>
2015-05-26 15:25:17 -07:00
Greg Kroah-Hartman d67a39ab38 greybus: Merge branch 'master' of github.com:gregkh/greybus 2015-05-26 08:39:33 -07:00
Alex Elder 30c6d9d753 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>
2015-05-23 16:54:39 -07:00
Alex Elder 4441f4759c 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>
2015-05-23 16:47:56 -07:00
Alex Elder 2de1a8b1a9 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>
2015-05-23 16:47:56 -07:00
Alex Elder eb765e4e91 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>
2015-05-23 16:45:42 -07:00
Alex Elder 344943d2cd 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>
2015-05-23 16:44:45 -07:00
Alex Elder e45524f849 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>
2015-05-23 16:44:45 -07:00
Alex Elder 8a76043722 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>
2015-05-23 16:44:45 -07:00
Alex Elder 22e17edaa7 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>
2015-05-23 16:34:50 -07:00
Alex Elder e9385e5d5a 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>
2015-05-23 16:34:39 -07:00
Alex Elder 8ea70fe049 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>
2015-05-23 16:31:42 -07:00
Alex Elder 6b7d5a1f47 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>
2015-05-23 16:31:42 -07:00
Alex Elder ee3ecf8028 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>
2015-05-23 16:31:42 -07:00
Alex Elder a702a09f20 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>
2015-05-23 16:31:42 -07:00
Mark A. Greer 0d17e0c9f1 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>
2015-05-23 16:26:41 -07:00
Mark A. Greer 6b34099ec3 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>
2015-05-23 16:26:41 -07:00
Mark A. Greer 48229e592f 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>
2015-05-23 16:26:41 -07:00
Mark A. Greer f9a4fee7fa 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>
2015-05-23 16:26:41 -07:00
Mark A. Greer e803cf712c 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>
2015-05-23 16:26:41 -07:00
Mark A. Greer 415b83111c 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>
2015-05-23 16:26:41 -07:00
Mark A. Greer 827e27e8fe 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>
2015-05-23 16:26:41 -07:00
Mark A. Greer 4c739e3ada 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>
2015-05-23 16:26:41 -07:00
Mark A. Greer 34aa7e1cad 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>
2015-05-23 16:26:41 -07:00
Mark A. Greer 555a0645b1 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>
2015-05-23 16:13:58 -07:00
Mark A. Greer 0e995aab21 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>
2015-05-23 16:13:58 -07:00
Johan Hovold 8d346df062 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>
2015-05-23 14:42:47 -07:00
Johan Hovold d52b35f6b6 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>
2015-05-20 22:52:03 -07:00
Johan Hovold 8e929a8230 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>
2015-05-20 22:52:03 -07:00
Johan Hovold c38cf10bbe 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>
2015-05-20 22:51:05 -07:00
Johan Hovold d933667a1e 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>
2015-05-20 22:51:05 -07:00
Johan Hovold d966820f2c 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>
2015-05-20 22:48:32 -07:00
Johan Hovold fed78bf6a2 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>
2015-05-20 22:48:32 -07:00
Viresh Kumar bdac599c70 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>
2015-05-20 22:44:37 -07:00
Viresh Kumar 27551b1d5f 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>
2015-05-20 22:44:37 -07:00
Viresh Kumar f5db53b4c7 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>
2015-05-20 22:43:05 -07:00
Viresh Kumar 8ba2522fa8 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>
2015-05-20 22:43:05 -07:00
Viresh Kumar c16b63e851 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>
2015-05-20 22:39:18 -07:00
Viresh Kumar 51b5d8d783 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>
2015-05-20 22:39:18 -07:00
Viresh Kumar 5ddf738e94 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>
2015-05-20 22:39:18 -07:00
Viresh Kumar 12eba9f8ef 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>
2015-05-20 22:39:18 -07:00
Viresh Kumar 8fd46587db 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>
2015-05-20 22:39:18 -07:00
Viresh Kumar 4890f31966 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>
2015-05-20 22:36:03 -07:00
Viresh Kumar 8de925b973 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>
2015-05-20 22:36:03 -07:00
Viresh Kumar 4f8ab1105d 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>
2015-05-20 22:36:03 -07:00
Greg Kroah-Hartman e806c7fb8e 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>
2015-05-19 11:00:44 -07:00
Greg Kroah-Hartman 5bd5f00c30 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>
2015-05-14 13:35:10 -07:00
Greg Kroah-Hartman 6b17492eee 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>
2015-05-14 13:35:10 -07:00
Phong Tran 6f8528e0be 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>
2015-05-14 09:49:04 -07:00
Rui Miguel Silva 65cac604b2 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>
2015-05-14 09:42:51 -07:00
Alex Elder ac1c2840bd 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>
2015-05-12 10:25:14 -07:00
Alex Elder 48cc8b8bba 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>
2015-05-12 10:25:14 -07:00
Alex Elder 91262c3ab7 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>
2015-05-12 10:25:14 -07:00
Alex Elder 48f19ee824 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>
2015-05-12 10:25:14 -07:00
Alex Elder 69f6034792 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>
2015-05-12 10:25:14 -07:00
Alex Elder a04c640e5c 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>
2015-05-12 10:25:14 -07:00
Greg Kroah-Hartman 64a54801ae 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>
2015-05-12 10:21:56 -07:00
Greg Kroah-Hartman 13956900b0 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>
2015-05-12 10:21:56 -07:00
Rui Miguel Silva 563e6b97b8 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>
2015-05-11 13:32:25 -07:00
Viresh Kumar 51e93aea65 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>
2015-05-11 13:30:09 -07:00
Viresh Kumar 4f4cc1bf07 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>
2015-05-11 13:30:09 -07:00
Greg Kroah-Hartman 61c0926eec greybus: gb-audio: fix build breakage on 4.1-rc1
In commit 1efb53a220 ("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>
2015-05-11 13:26:44 -07:00
Greg Kroah-Hartman 7f3f356e45 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>
2015-05-11 13:26:44 -07:00
Bryan O'Donoghue 68fff9604b 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>
2015-05-08 23:09:01 +02:00
John Stultz a4749bbeee 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>
2015-05-08 22:23:58 +02:00
Alex Elder 6d653370c0 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>
2015-05-07 22:57:31 +02:00
Alex Elder 5c58640d8d 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>
2015-05-07 22:55:43 +02:00
Alex Elder 9ade6d3122 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>
2015-05-07 22:55:43 +02:00
Rob Herring c13c8bf0cc 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>
2015-05-05 23:14:17 +02:00
Greg Kroah-Hartman e80d09af1e 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>
2015-05-05 11:11:04 +02:00
Greg Kroah-Hartman f487c802cb 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>
2015-05-05 11:11:03 +02:00
Greg Kroah-Hartman 63ca78b9ab 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>
2015-05-05 11:11:03 +02:00
Greg Kroah-Hartman 3906a59c96 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>
2015-05-05 11:11:03 +02:00
Greg Kroah-Hartman 99a4bd5902 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>
2015-05-05 11:11:03 +02:00
Greg Kroah-Hartman a549be5186 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>
2015-05-05 11:09:56 +02:00
Viresh Kumar f03eec8772 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>
2015-05-01 21:08:05 +02:00
Viresh Kumar 499ee955a1 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>
2015-05-01 21:08:05 +02:00
Viresh Kumar b022515ee6 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>
2015-05-01 21:08:05 +02:00
Viresh Kumar 20f087ec5c 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>
2015-05-01 21:08:05 +02:00
Viresh Kumar 8a5286ed2a 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>
2015-05-01 21:08:05 +02:00
Alex Elder 22fd2a8ade 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>
2015-05-01 16:41:11 +02:00
Viresh Kumar 55b930cd17 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>
2015-04-29 15:55:21 +02:00
Viresh Kumar fa2fbf16f6 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>
2015-04-29 15:53:18 +02:00
Viresh Kumar af6e8b4233 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>
2015-04-29 15:51:38 +02:00
Viresh Kumar 8f8b2297c0 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>
2015-04-29 15:48:32 +02:00
Viresh Kumar 58d674650b 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>
2015-04-29 15:48:31 +02:00
Greg Kroah-Hartman 6cf42a447d 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>
2015-04-17 16:12:49 +02:00
Greg Kroah-Hartman 75052a5504 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>
2015-04-17 16:12:49 +02:00
Johan Hovold 1ffc12be55 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>
2015-04-16 10:26:33 +02:00
Greg Kroah-Hartman dcd1dadd7e 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>
2015-04-10 11:20:35 +02:00
Greg Kroah-Hartman 67c920b892 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>
2015-04-10 11:18:49 +02:00
John Stultz 453bbea807 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>
2015-04-10 11:17:20 +02:00
Greg Kroah-Hartman b0235b2263 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>
2015-04-09 22:50:10 +02:00
Greg Kroah-Hartman 7baa184dbd 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>
2015-04-09 22:50:09 +02:00
Greg Kroah-Hartman f0b678709a 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>
2015-04-09 22:50:09 +02:00
Greg Kroah-Hartman a4d9150cba 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>
2015-04-09 22:50:09 +02:00
Greg Kroah-Hartman 0f035acded 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>
2015-04-09 22:50:09 +02:00
Greg Kroah-Hartman 764e824e2f 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>
2015-04-09 22:50:09 +02:00
Johan Hovold 24ef485398 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>
2015-04-07 17:31:05 +02:00