On Thu 20 Jun 2013 06:35, pankaj chauhan pondered:On 6/19/2013 6:27 PM, Lars-Peter Clausen wrote:On 06/17/2013 10:09 AM, akhil.goyal@xxxxxxxxxxxxx wrote:From: Akhil Goyal <akhil.goyal@xxxxxxxxxxxxx>
AD9361 is a radio phy(RFIC) for radio networks. This phy
can support LTE-FDD/LTE-TDD and WCDMA networks. The RFIC
can convert the analog radio signals from air to digital
IQ samples.
AD9361 is controlled via an SPI bus and all the register
read/ write can be performed via SPI transactions.
The AD9361 datasheet still hasn't been posted for public consumption yet (as
of today), but for those interested, here is something similar - just not
exactly - but it gets the idea across.
http://www.analog.com/static/imported-files/data_sheets/AD9357.pdf
Driver provides various operations for configuring and
controlling the AD PHY. These can be controlled from the
user space via the rfdev framework.
Driver also binds itself to one of AIC lane using RF framework.
The combination of AIC lane and PHY connected to it works
as one RF device.
Signed-off-by: Shaveta Leekha <shaveta@xxxxxxxxxxxxx>
Signed-off-by: Pankaj Chauhan <pankaj.chauhan@xxxxxxxxxxxxx>
Signed-off-by: Bhaskar Upadhaya <bhaskar.upadhaya@xxxxxxxxxxxxx>
Signed-off-by: Akhil Goyal <akhil.goyal@xxxxxxxxxxxxx>
Hi,
This is interesting. We at Analog Devices are currently also working on a
driver for this part. We are using the Linux Industrial IO (IIO)
framework though, since the AD9361 is more or less a multifunction device
implementing different functions already covered by the IIO framework,
like ADCs, DACs, clock chips and so on.
Yes i agree AD9361 is more of a multifunction device and it can fit in
IIO framework. This patch (ad9361: AD9361 device driver for Radio phy)
implements:
1. Programming of AD9361 :
Most of initialization is done by parsing Low level script generated by
ADI tool, and sending the SPIwrite/read/wait calibration commands to the
driver. This is more of a raw write interface to device.
The "ADI GUI tool", is a proprietary, closed source, Windows only application.
I think that for a Linux driver - we would want to be completely independent
of that, and that the driver should be (a) standalone, or (b) useable with
Linux based tools.
2. Adding utility function APIs for higher layers:
We have LTE/WCDMA stacks running in user space. They have requirement of
monitoring RSSI, changing Attenuation, reading/changing Rx gain,
disable/enable of tx/rx antennas, changing LO frequency etc. This patch
exposes APIs which can be accessed through RF device layer user space
interface (explained later in the email).
Wow - LTE in userspace?
What's your requirements for real-timeness of the system? Bandwidth? Are you
running a stock kernel for this? If you are monitoring RSSI, and changing
attenuation (an AGC loop) - how quickly does this loop need to run? What
speed are you running the ADC/DACs into userspace?
3. Control of Radio card (which has AD9361): We have radio card which
contains AD9361 and there are different set of PA/LNAs (Power
amplifier/Low Noise Amplifier). Each set caters a set of frequency
bands. This patch also exports functions to enable/disable a Tx/Rx path
(PA/LNAs) which are external to AD9361.
Isn't this just normal GPIO control? (like Arnd suggested - if you need GPIO -
make things a MFD - and use the existing GPIO infrastructure - at least that
is how I thought the GPO would be handled, and maybe even the CNTRL IN/OUT).
May be we can spit this driver in two parts :
1. AD9361 driver: which covers #1 and #2 as mentioned as above. And this
can be merged with the driver you have in IIO framework.
2. Radio card driver: which covers #3 and uses AD9361 driver's exported
APIs to program AD9361 OR may be we can program AD9361 from user space
using IIO interface.
pls let me know what do you think is best approach.
I don't know if we have all the answers yet either. We aren't running LTE - so
having a real world userspace consumer might help direct us down a workable
path for everyone.
It sounds like all the internal filters (which require floating point to
calculate the coefficients) - you are letting the GUI tool handle all this?
This is part of the issue we have been looking at - how to split things, so
no floating point in the driver...