Johan Hovold [Tue, 19 Jan 2016 11:51:13 +0000 (12:51 +0100)]
greybus: greybus_protocols: remove control-protocol version
Remove control-protocol version from the exported protocol definitions
as it is an implementation detail that makes no sense to export.
Currently gbsim uses the kernel's control-protocol version definitions
directly instead of reporting the version of the protocol it actually
implements.
Johan Hovold [Tue, 19 Jan 2016 11:51:11 +0000 (12:51 +0100)]
greybus: firmware: remove skip-disconnected flag
Remove the legacy protocol flag that was used to suppress sending the
control disconnected operation.
Instead rely on the fact that no control operations will be sent by
core to an interface that has been removed (e.g. after having received a
new hotplug event after the bootrom has jumped to the new image).
Johan Hovold [Tue, 19 Jan 2016 11:51:10 +0000 (12:51 +0100)]
greybus: core: add defensive connection disable post disconnect
Bundle drivers *must* disable their connections in the disconnect
callback, but add a defensive test and warn about buggy drivers
nonetheless.
Note that bundle drivers would generally release their state containers
in disconnect so a failure stop I/O could potentially lead to
use-after-free bugs in any late operation completion callbacks.
Johan Hovold [Tue, 19 Jan 2016 11:51:09 +0000 (12:51 +0100)]
greybus: core: disable incoming operations pre disconnect
Disable and flush incoming operations before calling driver disconnect.
Bundle drivers are still responsible for disabling their connections
in their disconnect callback.
Note that specifically the legacy protocols must have incoming
operations disabled when their connection_exit callback is called as
that is where their state is deallocated.
Johan Hovold [Tue, 19 Jan 2016 11:51:08 +0000 (12:51 +0100)]
greybus: connection: add helper to disable incoming operations
Add helper to disable and flush incoming operations.
This is intended to be used by core to flush any incoming requests
before calling driver disconnect, but could potentially later be
exported for driver use as well.
Note that we currently flush all incoming operation and allow the
request handlers to run, but cancel any responses sent. This may need to
be refined later.
Add a connection request-handler field to struct gb_connection that is
set when the connection is enabled.
This is a step towards removing the legacy protocol abstraction from
core, and will also be used to implement unidirectional connection
states (e.g. only outgoing operations are allowed).
Add the first Greybus bundle driver that will be used when transitioning
from legacy Greybus protocols to bundle drivers.
The legacy-protocol driver initially binds to all current bundle classes.
In order to avoid having to update current module-loading scripts, keep
this driver internal to greybus core at least until modalias support is
added. Note that this prevents unloading any protocol drivers without
first tearing down the host device due to a circular module dependency.
greybus: camera: Update configure stream based on new interface
Interface has been changed.
return code will not return number of configured streams but
just error code.
Number of streams is passed as pointer and if operation result
is changed number of streams will be updated.
Flags are also used for information regarding configure stream
operation result.
greybus: camera: Add support for configure streams flag in gb interface
Update gb interface and export flags needed for latest
protocol version. Number of streams also can be changed
based on operation result.
Caller sets input flags, end fucntion return output
flags
Input flags supported:
- GB_CAMERA_IN_FLAG_TEST - Need to be set when operation
is not actually applied.
Output flags supported:
- GB_CAMERA_OUT_FLAG_ADJUSTED - This is result of the operation
if this flag is set, result is adjusted and operation
need to be repeat.
Michael Scott [Fri, 15 Jan 2016 22:03:17 +0000 (14:03 -0800)]
greybus: firmware: replace colons with underscore in firmware file request
Due to some issues with handling colons in Android (and possibly
future exposure to other problems) we should remove the colons from
the firmware file request. Replacing them with underscores.
There is a colon delimiter between the source and destination in the
PRODUCT_COPY_FILES format. The greybus naming logic breaks the parsing
routine and generates an Android build break.
Signed-off-by: Michael Scott <michael.scott@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
greybus: camera: Fix backword compatibility in configure streams
Configure streams ret code should be number of streams in
gb operation exported to HOST camera.
Until gb operation is migrated to new interface return
number of streams in ret code.
Laurent Pinchart [Thu, 14 Jan 2016 23:33:55 +0000 (01:33 +0200)]
greybus: camera: Return the result flags from the configure_streams response
And return the response num_streams field through a pointer variable
instead of using the return value of the function as both an error code
and a positive number of streams, it makes the API more consistent.
Vaibhav Agarwal [Wed, 13 Jan 2016 21:07:56 +0000 (14:07 -0700)]
greybus: audio: Enable codec module detection on different slots
driver_name associated with dev_name was hard coded earlier.
This limits, audio codec module to be detected on Port#5 only.
Now, driver_name is generated dynamically based on dev_name.
This enables codec module detection on any 1x2 slot.
Also, Update dev_id based on slot number, instead of bundle->id.
bundle->id is not unique for multiple modules added, thus now
using slot number for unique identification.
Vaibhav Agarwal [Wed, 13 Jan 2016 21:07:55 +0000 (14:07 -0700)]
greybus: audio: Cleanup GB protocol connections in case of abrupt codec removal
We need to clean up GB protocl connections, otherwise successive
codec insertions fails repeatedly.
NOTE: As per suggestion, since codec is already removed, one should
not trigger any GB command. It'll cause a delay of atleast TIMEOUT
value.
HOwever, failing to cleanup GB protocol, causes successive module
insertion to fail
Vaibhav Agarwal [Wed, 13 Jan 2016 21:07:52 +0000 (14:07 -0700)]
greybus: audio: Add GB Audio class protocol functionality in GB codec DAI ops
GB Audio class driver provides APIs to configure GB codec module.
This patch adds relevant operations in DAI ops callback functions to
configure codec module as per DAPM sequence triggered.
Vaibhav Agarwal [Wed, 13 Jan 2016 21:07:51 +0000 (14:07 -0700)]
greybus: audio: Add topology parser for GB codec
For each GB codec module inserted, DAPM widgets, kcontrols, routes
and DAIs can be fetched through greybus in a binary chunk and parsed
locally to create & populate DAPM graph for the specific module.
It is required by each codec module to populate a minimum set of
kcontrols with fixed names to support basic audio usecase.
To support advanced features of codec module, the same can be polpulated
with existing topology parser. However, to use them for different usecase
separate mechanism (may be via MSP) is required to inform userspace about
their configuration value & enable/disable sequence.
ToDos:
Currently, support for enumerated kcontrol/dapm control is hardcoded.
Need to add complete logic within the parser.
Vaibhav Agarwal [Wed, 13 Jan 2016 21:07:50 +0000 (14:07 -0700)]
greybus: audio: Use greybus connection device for codec registration
Use GB Audio mgmt, data protocol ids to register codec module with
GB protocol. And in response to mgmt->connection_init(), register
GB codec driver with ASoC.
Now, using msm8994 machine to register DAI link dynamically on
codec insertion.
ToDos:
- snd_soc_register_codec() uses driver->name to identify device id.
However, for GB device, .driver{} is not yet populated by GB core.
Thus, defining dummy structure within codec driver. This should
come from GB core itself.
Even existing .driver{} may cause problem in case of multiple
modules inserted or inserted at a different slot.
- Fix logic for gbcodec->dais & gbcodec->dailinks. Current
implementation contains some hard coded data with assumption of
count=1.
- Evaluate definition of 'gbaudio_dailink.be_id' in case of multiple
DAI links.
Vaibhav Agarwal [Wed, 13 Jan 2016 21:07:49 +0000 (14:07 -0700)]
greybus: audio: Build audio module conditionally
Added CONFIG_XXX flag check before compiling audio module.
Once we add dynamic DAI link registration from audio driver,
this check wil be required to avoid compilation failures with
other kernel revisions.
Also, renamed header file to better align with .c file name.
Mark Greer [Wed, 13 Jan 2016 21:07:47 +0000 (14:07 -0700)]
greybus: audio: Add direct audio streaming control for APBridgeA
The latest audio architecture does not stream audio data over the
USB link between the AP and APBridgeA. Instead, audio data is
streamed directly over the I2S link between the two.
To support the Greybus audio driver in setting up the I2S port and
controling packeting/depacketizing of audio data to/from Greybus
audio messages, define a set of commands and their parameters.
These commands and parameters will be placed into a request and sent
over the USB control channel to APBridgeA. A corresponding driver
on APBridgeA will receive and process the requests.
Signed-off-by: Mark Greer <mgreer@animalcreek.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Vaibhav Hiremath [Wed, 13 Jan 2016 20:36:47 +0000 (02:06 +0530)]
greybus: arche-apb-ctrl: Enable the clocks after regulator enable
It makes more sense to enable the clock after power is enabled
to the device, so move clock enable code after regulator_enable
and setting up BOOT_RET pin.
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> Tested-by: Michael Scott <michael.scott@linaro.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@linaro.org> Tested-by: Laurent Pinchart <laurent.pinchart@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Gb camera need to communicate with HOST driver.
as temporary solution there will be shared header
between gb camera HOST camera.
Both need to be in sync since gb drivers are compiled
out of the kernel tree.
Gb camera register camera operation functions when is created.
Currently unregister is not supported.
Rui Miguel Silva [Tue, 12 Jan 2016 14:35:49 +0000 (14:35 +0000)]
greybus: lights: remove sync operation and work queue
In kernel v4.5 there is a change in LED api, which remove the need for
individual work queue and rename the set_sync operation to set_blocking.
This patch add the handling of this case and avoid compilation failure
for this kernel versions.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Rui Miguel Silva [Tue, 12 Jan 2016 14:35:48 +0000 (14:35 +0000)]
greybus: kernel_ver: add handle for lights in 4.5
In v4.5 the LED API is changed related to the set brightness
operations, set_sync is removed and the workqueue handling is now done
by leds core, so no need for individual drivers to have one.
This will be done by removing the SET_SYNC macro and add a new
SET_BLOCKING.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This adds the GREYBUS_ID environment variable to all interface uevents
to let userspace know the vendor/product id of the module interface that
has been added or removed from the system.
greybus: APBridge: move APBridge request protocol to a common .h file
This moves all of the APBridge request protocol commands that are
currently used to a common .h file for everyone to be able to use them
in the future, where needed.
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Tested-by: Mark Greer <mgreer@animalcreek.com> Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
greybus: host: provide "generic" apbridge output calls
Provide a new function, gb_hd_output() to send data to the apbridge.
This is useful for the camera and audio drivers that need to do this
type of messaging.
The camera driver is converted to use this new function, the audio
driver can use it when it gets merged later.
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Tested-by: Mark Greer <mgreer@animalcreek.com> Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
greybus: power_supply: fix use after free of power supply
Individual power supply were being freed and checked using the wrong
pointers and at the wrong place, which would make several issues, like
used after free and so on.
Fix it by freeing all allocated memory after release individual power
supply.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org> Reported-by: Johan Hovold <johan@hovoldconsulting.com> Reviewed-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
greybus: power_supply: fix unregister on error path
If setup fail the release for each supply needs to know the status at
unregister time. So, add the field to the structure, update it at setup
time and use it at release.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org> Reported-by: Johan Hovold <johan@hovoldconsulting.com> Reviewed-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Vaibhav Hiremath [Mon, 11 Jan 2016 12:11:24 +0000 (17:41 +0530)]
greybus: arche-platform: Add wake/detect support along with handshaking with AP
Add wake_detect support to arche-platform driver which is responsible
for SVC control. This patch also adds code for handshaking between
AP <=> SVC. The sequence is,
1. AP boots
To keep compatibility between DB3 and EVT platform, SVC will be
help in reset and AP driver would release it at appropriate time.
wake/detect pin (WD8A) = Low
reset (SVC/APB1/APB2) = Asserted (as per polarity)
2. AP Driver gets inserted
2.1. AP will deassert reset to SVC (following power on sequence)
2.2. SVC allows 360 milliseconds to elapse after switch boots to work
around bug described in ENG-330.
2.3. AP asserts wake/detect pin (WD8A = HIGH)
3. SVC detects assertion of wake/detect pin, and sends "wake out" signal to AP
4. AP receives "wake out" signal, takes AP Bridges through their power
on reset sequence as defined in the bridge ASIC reference manuals
5. AP takes USB3613 through its power on reset sequence
6. AP should enumerates AP Bridges
Note: ISR has been deliberately removed (not merged) as we are still
not sure how it will be used, in runtime usage context. Driver as such
doesn't do anything for runtime assert-n-deassert of reset to SVC/APB's,
it just simply offloads it to user by exporting required gpio's.
The exported gpio's are required for FW flashing from user space.
When it comes to usersace manipulated control sequence, user has to manage.
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> Tested-by: Michael Scott <michael.scott@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Vaibhav Hiremath [Mon, 11 Jan 2016 12:11:23 +0000 (17:41 +0530)]
greybus: arche-apb-ctrl: deassert reset at the end of probe
Now the complete handshaking between AP<=>SVC would be
offloaded to parent driver (arche-platform) who is
responsible for SVC control, so the apb-ctrl driver can
just simply bring APB's out of reset during probe itself.
Along with deasserting reset, this patch renames the local fn
to exclusively use it for reset purpose.
Note that, driver is exporting reset gpio to
user, so user can still flash FW from prompt.
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> Tested-by: Michael Scott <michael.scott@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Vaibhav Hiremath [Mon, 11 Jan 2016 12:11:22 +0000 (17:41 +0530)]
greybus: arche-apb-ctrl: Remove wake_detect gpio and related code
With TIME_SYNC functionality, assignment of wake/detect pin
will change,
WD_8A => to bring APB's out of reset
WD_8B => TIME_SYNC operation
So in order to support this, we can no longer keep wake_detect
gpio in apb-ctrl driver. So remove it.
In the subsequent patches, wake_detect support will be added
to parent SVC driver (arche-platform) who is responsible for SVC control.
Note that, this patch also removes ISR related code.
The APB state still is maintained, for future use.
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> Tested-by: Michael Scott <michael.scott@linaro.org> Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Viresh Kumar [Mon, 11 Jan 2016 05:59:15 +0000 (11:29 +0530)]
greybus: arche-apb: Do cleanup within apb_ctrl_init_seq() for error cases
Relying on apb_ctrl_cleanup() to do the cleanup for errors that occurred
within apb_ctrl_init_seq() isn't a very clean idea. Handle that
separately within apb_ctrl_init_seq().
This will clean apb_ctrl_cleanup() in later patches.
Viresh Kumar [Mon, 11 Jan 2016 05:59:13 +0000 (11:29 +0530)]
greybus: arche-apb: Properly use dev_err/info/warn
Use dev_err for errors after which we need to abort the currently
running routine and dev_warn for resource allocation failure, with which
we can continue to work.
Viresh Kumar [Mon, 11 Jan 2016 05:59:12 +0000 (11:29 +0530)]
greybus: arche-apb: NULL is a valid regulator
Since NULL could in theory be a valid regulator we ought to check for
IS_ERR() rather than for NULL. In practice this is unlikely to be an
issue but it's better for neatness.
Viresh Kumar [Mon, 11 Jan 2016 05:59:05 +0000 (11:29 +0530)]
greybus: arche-platform: Put APB in reset if of_platform_populate() fails
The current implementation around of_platform_populate() is not so
great. On error, we first print an error message, followed by a success
message and finally we return an error.
And over that we don't undo what we did initially.
This patch puts the APB back into reset and create a separate error
path to make things clear.
Viresh Kumar [Mon, 11 Jan 2016 05:59:04 +0000 (11:29 +0530)]
greybus: arche-platform: Export GPIOs after populating APBs
Populating APBs operation can potentially fail and it would be better if
we export the GPIOs towards then end of the routine, so that we don't
need to unexport them on error cases.
Eli Sennesh [Fri, 8 Jan 2016 19:11:29 +0000 (14:11 -0500)]
greybus: firmware/bootrom: debug output from bootrom protocol
The bootrom protocol issues no dynamic debugging messages when it functions
successfully. Use dev_dbg() to fix that by issuing kernel logs when firmware
download works.
Signed-off-by: Eli Sennesh <esennesh@leaflabs.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Jacopo Mondi [Fri, 8 Jan 2016 16:13:20 +0000 (18:13 +0200)]
greybus: camera: Add support for flags to stream_configure
Add support for the flags field of the stream configure request that was
recently added to the camera protocol and update the debugfs arguments
parsing accordingly. The stream configure response layout is also
updated to the latest protocol specification.
greybus: svc: Replace link config hack with standard operation
The link config operation was a hack only designed to fulfill the camera
driver's needs. Now that a standard operation is defined for the same
purpose, implement it and remove the hack.
greybus: arche-apb-ctrl: Do not bring APB out of reset in probe
With addition of handshaking between AP <=> SVC, driver
brings out APB out of reset only on reception of WAKE_MOD
signal from SVC. So remove the deassertion from probe.
greybus: arche-apb-ctrl: Set wake_detect gpio to low initially
This patch enables handshaking of AP and SVC using wake_detect
gpio (WD_8A and WD_8B).
Note that WAKE_DETECT polarity is active-high, so in order to
enable handshaking between AP <=> SVC, we need to set wake_detect
gpio to low initially, so that driver can send WAKE_DET signal
(active-high) to SVC and then SVC can send back WAKE_MOD signal
(active-low).
And on reception of WAKE_MOD signal, driver would bring respective
APB out of reset.
Vaibhav Hiremath [Mon, 28 Dec 2015 14:36:32 +0000 (20:06 +0530)]
greybus: arche_platform: Remove child's platform device as part of _remove() fn
It seems we need to delete platform_dev of all childs explicitly,
in _remove() fn callback of parent driver.
There were some discussions about having of_platform_unpopulate(),
but it never made it to mainline.
https://lkml.org/lkml/2013/7/19/615
There are some drivers which are removing platform_dev explicitly,
as done in this patch.
Note that, without this, multiple insmod-rmmod won't work, as I see
driver probe gets invoked twice and leads to failure of probe.
Johan Hovold [Wed, 30 Dec 2015 10:23:51 +0000 (11:23 +0100)]
greybus: camera: destroy data connection on link-config errors
Make sure to tear down the data connection also on failure to configure
the link by setting the data_connected flag immediately after creating
the connection.
Viresh Kumar [Mon, 28 Dec 2015 06:29:01 +0000 (11:59 +0530)]
greybus: interface: Fetch and expose version of interface's firmware
The version of the currently running firmware on the module is useful
for userspace as it can be used to find if an update is available or
not. This patch fetches interface's version with a new control operation
and exposes the same in userspace.
Viresh Kumar [Mon, 28 Dec 2015 06:29:00 +0000 (11:59 +0530)]
greybus: interface: Receive serial-number on hotplug event
Two exactly same modules can be uniquely identified using module's
serial-number. This patch updates the interface hotplug event to also
receive the serial-number of the module.
Viresh Kumar [Wed, 23 Dec 2015 03:37:42 +0000 (09:07 +0530)]
greybus: svc: Set interface's hotplug attributes before using them
gb_svc_read_and_clear_module_boot_status() relies on the values of
ddbl1_manufacturer_id and ddbl1_product_id to distinguish between ES2
and ES3 chips, but those values are set for the interface structure only
after gb_svc_read_and_clear_module_boot_status() is called.
This makes ES2 module to fail with following errors:
greybus 1-2: Module not ready yet
greybus 1-svc: failed to clear boot status of interface 2: -19
Fix this by setting these values before calling
gb_svc_read_and_clear_module_boot_status().
Fixes: 51f1dc421b1f ("firmware and svc: detect the difference between ES2 and ES3 chips") Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Reviewed-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Bryan O'Donoghue [Wed, 23 Dec 2015 16:48:59 +0000 (16:48 +0000)]
greybus: svc: Change GB_SVC_TYPE_LINK_CONFIG to 0x10
The greybus specification reserves SVC type 0x0d-0x0f for timesync. 53124d73 ('svc: Add support for the link config operation') allocated the
next available type 0x0d which conflicts with the specification. Change the
type to 0x10 to ensure kernel and specification agree.
Vaibhav Hiremath [Wed, 16 Dec 2015 10:59:20 +0000 (16:29 +0530)]
greybus: arche-apb-ctrl: Assert reset to APB at the end of probe
Until we have proper handshake mechanism implemented with SVC
assert reset to APB at the end of probe.
We are safe here to do that, as SVC always enables clock to APB's
currently.
And also from EVT1 perspective, we should be good, as clock control
signals are now moved to AP.
Vaibhav Hiremath [Wed, 16 Dec 2015 10:59:19 +0000 (16:29 +0530)]
greybus: arche-apb-ctrl: Add APB control driver
It was messy to integrate both SVC, APB (and any other arche
platform specific control) into one single driver. Especially
due to cross-dependency.
AP first needs to bringup SVC, as SVC should enable clock to APB.
APB should come up before HUB, as due to some reason HUB wouldn't
enumerate APB's is APB comes up later.
And on top of that we should have clean picture of hardware description
in DT file.
So this patch introduces APB control driver. Mostly copied from original
arche-platform driver + fixed boot sequence.
Vaibhav Hiremath [Wed, 16 Dec 2015 10:59:18 +0000 (16:29 +0530)]
greybus: arche-platform: Rename db3-platform to arche-platform
With multiple platforms getting rolled into ara,
db3 name is confusing. And this driver is applicable
to all arche platforms, so make sense to rename it to
arche-platform.c. Also rename all internal functions
accordingly.
Vaibhav Hiremath [Wed, 16 Dec 2015 10:59:17 +0000 (16:29 +0530)]
greybus: db3(arche)-platform: Remove all APB control code
Current db3(arche)-platform driver was only handling APB control signals,
which is where it all started. But now with completion of DB3/EVT1 bringup
we know that platform driver is more than APB control.
We have to bring SVC up before APB, as SVC supposed to enable
clock to APB's. Note that, in EVT1, AP will have direct control over
APB's clock.
Then we have dependency between APB and USB HUB, where, APB should be
brought up before USB HUB (note that this needs to rootcaused).
This patch cleanup the db3(arche)-platform driver to remove all APB control
code. The idea here is create another driver for APB control
(arche-apb-ctrl.c), which will deal with APB.
And this driver will have generic/common platform specific support,
currently manages SVC resources.
This patch also takes in all the changes from factory branch, discovered
during bringup.
Eli Sennesh [Tue, 22 Dec 2015 22:26:57 +0000 (17:26 -0500)]
greybus: firmware and svc: detect the difference between ES2 and ES3 chips
The Greybus SVC code needs to read and clear the module boot status upon
hotplug; this requires reading two different attributes depending on whether
we're running on ES2 or ES3. On Marti Bolivar's (mbolivar@leaflabs.com)
advice, we detect ES2 using the unique ES2_DDBL1_MFR_ID and ES2_DDBL1_PROD_ID
for ES2 hardware, and treat all other chips as ES3 appropriately. This patch
detects the difference and adds the appropriate definitions for ES3 hardware.
Signed-off-by: Eli Sennesh <esennesh@leaflabs.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>