If, like me, you think of op-amps and some National Instruments analog-to-digital converters when you think of Analog Devices, you might be wondering what they're doing writing Linux drivers. The short answer is they're acquiring IP: They've bought Linear Technology (which makes tons of PMIC devices) and Maxim Integrated, who make tons of specialized PMIC, analog, RTC, interface, and other chips.
The link above is a press release, the full list of devices is here:
Part numbers prefixed with "LTC" are from Linear Tech, part numbers prefixed with "MAX" are Maxim, part numbers prefixed with "AD" are Analog Devices. Part numbers prefixed with "DS" are from Dallas Semiconductor, which was bought by Maxim a long time ago.
As someone who typically uses these devices in much smaller embedded systems, it's nice to have these hardware abstraction layers listed in one place, instead of having to transcribe it from the datasheet.
This is the next logical step for semiconductor companies like AD, TI, etc.
AD doesn't tend to compete on cost, so high quality open source drivers become a key differentiator compared to other companies with lower cost parts, especially as these parts become increasingly complex. A 9 axis IMU with 10 different acquisition and buffering modes, built in algorithms, etc. becomes a lot more tractable if you don't have to write the whole driver from a datasheet.
Actually I think their plan is to continue not competing by acquiring all competition, as is now the norm in the semiconductor business. They call it "consolidation" but lets not mistake it for what it is.
Yes - the list on https://wiki.analog.com/linux is a consolidated list:
- ADI devices (there is only one ADI, when a company is acquired, they are integrated - the group inside ADI that writes drivers doesn't care what the part prefix is)
- internal ADI development and upstreamed/mainlined drivers that have been done by our customers / other contributors
It was done this way to try to make it easier for people to find the drivers, rather than rolling through kernel source. The Majority of the drivers are upstream (including the ones ADI writes), or are in process of going upstream, but some drivers - because of their development flow - will never meet upstream kernel coding guidelines.
The core SOC is a TI chip, but at least at the time while TI wasn't abhorrent, anything that might remotely help get the USB port working was a proprietary blob. I think they'd also sold the IP for that product to someone else by the time I was tinkering with it; I can't remember exactly but do recall it was either a nightmare or impossible to get a copy of the source code for the factory firmware.
This has turned me off to anything even using TI chips that I'm aware of. Maybe they've gotten better in the last decade. Probably they're fine if you're a hardware manufacturer paying for chips.
If, like me, you think of op-amps and some National Instruments analog-to-digital converters when you think of Analog Devices, you might be wondering what they're doing writing Linux drivers
That's a pretty dated view of ADI's business.
These days they make most of their cheddar in their high speed data converter business. They have GSPS ADCs and DACs available that are hundreds of dollars per chip.
The Kuiper Linux support for Xilinx Zynq and MPSoC is telling. That's coded language for 5G physical layer and electronic warfare/SIGINT uses.
I know it's a pretty dated view, but is it really true that most of their...profits? revenue? are in the high-speed high-dollar data converter segment? Sure, one of those chips might cost as much as a reel of other chips, but for every van with a SIGINT box, there are thousands of civilian electronic devices.
High speed A/D and D/A is a big research driver to much of their business. The advances they make in gigasample D/A fabrication, can apply across a wide range of their product portfolio. The cutting edge chips may not represent a huge chunk of silicon volume, but they are a big driver of profitability. The volume is also likely a lot higher than you realize: these ADCs/DACs are ubiquitous in modern digital radars of the type preferred by the US military.
It also forms a big part of their business to sell associated components that complement the converters: clock sources, PLLs, some discrete RF, etc.
>The Kuiper Linux support for Xilinx Zynq and MPSoC is telling.
You missed the Intel SoC and Raspberry Pi support too. :)
According to the Annual Report [1] - ADI works with 125,000+ customers. That means diversity in application. The press release was focused on Linux, but there are a lot of other ecosystems that ADI also participates in - from Arduino to Pmod to No-OS to Mbed and more.
Oh man, c'mon. That kind of thing bugs me. Just "return reg == LTC_REG_CONFIG" already, sheesh. (And maybe make it a preprocessor directive while you're at it?)
Int-> bool conversion is something that MSVC complained about (C4800) for the longest time for some kind of obscure reason. Wouldn’t surprise me if this code was written against a longer that had a similar warning OR that maybe this code is shared with their Windows driver and this needs to compile on both (at least that’s my attempt at finding the most generous explanation for that).
void foo(bool bar)
{
}
int main(void)
{
foo("Whose bright idea was this?");
}
No error, not even a warning, perfectly legit code. If bar had been declared int or char, you'd get an error. Instead, your code ends up less safe because you used bool, thinking you were doing the right thing. Yes, they wanted to allow it anywhere a conditional expression would fit, but implicit conversion from anything other than int and char would have been a good place to draw the line.
So I wouldn't be surprised if the GP example was prompted by a similar design flaw in either the language or a particular compiler.
> The == (equal to) and != (not equal to) operators are analogous to the relational operators except for their lower precedence. Each of the operators yields 1 if the specified relation is true and 0 if it is false. The result has type int. For any pair of operands, exactly one of the relations is true.
It's not really an explanation though. It's how the language should work.
That ternary operator "?" is just an if-statement which should have the same "problem" with an int argument. It is a broken compiler that would complain about an if statement but an identical ?-statement.
If the int nature of equals-to was a problem, you'd have to use limit its use to switch statements.
There's no problem with the "int argument". (Not sure if you mean the function argument ("reg") or the operand of the conditional operator, but either way not a problem.) The conflict is between the declared return type of the function and the type of the returned expression.
No, it could not. The controlling expression of any kind of conditional statement in C can be an integer. The return type of a function which returns boolean, though, should be boolean.
The strict requirement in the standard is just a 'scalar type': every conditional expression in C, even `if (true)`, technically evaluates on unequal comparison to zero. See section 6.8.4.1 "The if statement" of the standard:
This applies to ternary operators, if statements, do/while loops, for loop termination conditions, etc.
However, when defining a function that returns boolean, you've asked the compiler to make your program more strict than just returning an integer that's zero or nonzero, you're not allowed to return anything but 'true' or 'false' - no, you're not allowed to pack in error codes after the fact!
It's not possible to remember all the details of C at one time. I feel like my low-level understanding shifts over different areas over time depending on the type of work I have been doing.
Then there's living in C++ land, which is 1000 times worse.
Linear Technology? I wonder if they can be convinced to open up the source of LTSpice. I'm sure that isn't something they haven't been asked about already... but if they are willing to give such a good simulator away for free, why not show off the source as well?
if they are willing to give such a good simulator away for free, why not show off the source as well?
Because giving away the source code to their simulator doesn't make any business sense in the way giving a Linux kernel driver does.
Giving away LTSPICE is an effort to commoditize their complements. The complement to an opamp is a high quality simulation model. The complement to a high speed data converter is a working Linux driver for JESD204B. Both decrease the effort involved for ADI's customer to use ADI's parts.
Giving away LTSpice source code doesn't achieve a similar aim.
I'd be happy if they'd just open-source the UI. I couldn't care less about the simulator secret sauce, but there is no reason it has to be saddled to a user interface that makes EAGLE look sane by comparison.
I'm actually glad that they haven't overhauled the UI. It would be great if they made tiny improvements, like making the font size and color defaults more pleasant. Deep blue on black as the default plot is less than stellar.
Also, unless something has changed, ltspice is wholly written by one person.
That won't happen. They've specifically said that they maintain it because it helps them sell more product. They also encrypt their models. If they open source it, they lose both encryption and exclusivity.
The goal is to always upstream every driver (and we do a pretty good job at that). Depending on the lineage of the software (who developed it, what they developed it for) - it may not be possible to meet the kernel coding guidelines - so we don't send those upstream.
All the Linux kernel drivers found on https://github.com/analogdevicesinc/linux or upstreamed at kernel.org are released under the standard Linux kernel license - GPL 2.0. There is no "only for ADI devices" possible - doing so would be a violation of section 6 of the GPL 2 ("You may not impose any further restrictions on the recipients' exercise of the rights granted herein.")
Yes - ADI would encourage anyone to buy their devices - but no - we don't force it - There are many things that are "ADI devices only", but that's normally userspace or HDL or tools, not kernel.
I see how you read that completely differently than how I meant it. I apologize, and thank you for pointing that out.
I meant to convey that creating a free software tool specifically to support a hardware catalog has precedent, makes business sense, and is useful to customers. Not everything has to conform to the FOSS die-hard ethos to upstream everything.
The goal is to always upstream every driver (and we do a pretty good job at that). Depending on the lineage of the software (who developed it, what they developed it for) - it may not be possible to meet the kernel coding guidelines - so we don't send those upstream.
It baffles me how many times companies go "oh, instead of contributing these changes to an existing distribution, or the mainline, let's release our own shitty fork of that major distribution, which of course we will do a terrible job of keeping current with, and stop maintaining after about a year because the intern that was doing it moved on."
I always thought the reason for this is that you can't just dump any half-baked crap into the kernel repo, it needs to have a certain level of quality. Its just cheaper that way, and there is no back-and-forth discussing issues for several months. But maybe I'm wrong?
under drivers/ there is a place called staging/ that you put your drivers there until it's solid then becomes official, to encourage exactly that, it's way better a place to host drivers than vendor's own repo or distro, in my opinion.
As I understand, Linux doesn't have a kernel-to-driver API so "upstreaming" a driver means that you have to maintain it and update every time something in the kernel changes.
Windows driver model is so much better. Windows driver model allows you (in theory) to run drivers written 20 years ago.
Linux model doesn't scale because the more drivers the kernel includes, the more work is required to update them when something changes.
Also Linux model doesn't allow reusing unmodified drivers by other operating systems. So developers of other OS's have to duplicate the work that already has been done.
That's what you have to do if you don't upstream. The Linux community is responsible for updating any upstreamed drivers that are affected by code changes that they make.
Cookie consent form literally just has a giant accept button. (Decline is hidden in the text, one level deeper and the button is purposefully made to look like grey text - no clickable button outline).
> We process your personal data ... to understand website usage and present you with content and advertising based on your browsing activities and interests, provided you have not opted out of such data processing.
GDPR is clear that the default is opt-in, not opt-out. And yes, the consent popup does not seem compliant to me.
I highly recommend you file a complaint with your DPA [1].
Extra disclaimers apply - I work for ADI, but I am not familiar with the details of GDPR, I don't live in the EU so I'm not covered by the GDPR, nor am I a lawyer, nor do I work on/with the web or compliance team.
I did forward your concern to the folks responsible for the web site and GDPR compliance - which I know they take very seriously.
From a personal opinion standpoint - while I'm sure there is some clarification to be made on the description, things like " ... provided you have not opted out of such data processing." could have been written " ... provided you have opted into such data processing." Neither says what the default is (the way I read it), just that there is an option.
The EU web site that you point to (for making a complaint), has options for "opt-in" and "opt-in less" (their words are "Accept All Cookies" or "Accept Only Essential Cookies"); there is no opt-out there either. Who is to say which are "essential"? On their cookie description page https://ec.europa.eu/info/cookies_en (which is actually pretty good, and more detailed than most), they don't say which are essential and what are not.... so still have no idea what I'm agreeing to...
Not saying that the ADI site is compliant or not (I only know that lots of folks worked on it and spent a lot of time on it), also acknowledge there are always room for improvements - which may or may not happen (Again - not on that team) - only that's its hard to communicate some of these things sometimes...
Thanks for taking the time to respond, I really appreciate it.
By the looks of it, the analytics cookies (eg SC_ANALYTICS_GLOBAL_COOKIE) are not set when not clicking "Accept and proceed". So my issue is only with the wording. In practice it is already opt in, so the text can and should be changed to opt in.
The wording opt out does say the default is to accept, and you have to explicitly protest to not accept.
(It looks like the wording was already changed?)
Imho, you shouldn't look at it as cookies vs no-cookies. The GDPR is not really about cookies, but about protecting your personal data. You're allowed to set cookies! But if you're processing personal data (such as non-anonymous analytics), you do have to ask permission.
What bothers me the most is the consent modal:
I have to click the small blue text "cookie details" (vs the large green "Accept and proceed"), and then click the gray "Decline cookies" to not have my personal data processed and shared.
Why not give visitors 2 options equally?
- "Please use (and share) my personal data to improve this (and other) sites", and
- "No thanks, I'm just browsing"
If you offer those 2 options (and don't try to hide the "no thanks" behind an extra click and a hidden link), I would seriously reconsider consenting.
As a sidenote: I would be even more likely to consent if it's not the first thing you force on me. Visiting a press release with a fresh session cookie? Or landing directly on a datasheet from a google search? Why even bother with non-anonymous analytics and ask me for consent?
But if I'm clicking through and visiting other pages? Sure, ask to track me. My personal default is to decline, but if you can show mutual benefits I'm way more likely to consent.
As for the comments on the EU website I linked to: I agree. The wording is not clear as to what I'm accepting. As far as I understand:
- "visitor preferences" and "operational cookies" are required
- analytics cookies can be declined (even though they are already anonymous)
- third party cookies are handled separately, when viewing third party content
Following my own advice, I will contact the European Union DPO, and ask them to clarify the consent popup.
This should really be an import addendum to my previous post!: the first step is to contact the site's DPO, and only escalate to your nation's data protection agency when this approach fails.
Thank you again rgetz for taking the time to respond, and for raising this issue internally. It looks like wording of the privacy policy was already changed. I hope the consent popup can also be improved. Your response and the quick update of the privacy policy has greatly improved my opinion of Analog Devices.
I hope they'll try to upstream some of those drivers at least. I've written driver code for some parts before and I was better off not even looking at their code and only going by the datasheet. Except when the code worked around silicon bugs not mentioned in the errata. Fun times.
The goal is to always upstream every driver (and we do a pretty good job at that). Depending on the lineage of the software (who developed it, what they developed it for) - it may not be possible to meet the kernel coding guidelines - so we don't send those upstream.
Isn't their own best commercial interest to get their drivers accepted into the mainline Linux kernel? Why they would just release a random distribution??
Yes - we attempt to push all drivers upstream, but there are many people who want to just try something out, and don't want to compile kernel and userspace from source.
The Kuiper distribution is about convenience for those people who want to be users, not developers.
Yes - the goal is to always upstream every driver (and we do a pretty good job at that). Depending on the lineage of the software (who developed it, what they developed it for) - it may not be possible to meet the kernel coding guidelines - so we don't send those upstream.
I use some of these chips, and took a random stab at one of the files to see what it contained, a SPI-bus i/o expander. It looks pretty useful.
I usually write my own drivers, but that gets to be more and more effort if I want to make use of more sophisticated functions, plus I can make mistakes by mis-reading the datasheet or just counting wrong. I might be discouraged from using a function that I don't quite understand, but a pre-written driver might get me past that.
Note that these "drivers" are routines that talk to fairly low level hardware ports of a Linux computer, and I might modify the code for use on a microcontroller without an OS.
Good question. Maybe I'm unclear on the definition of "driver." I've used the term to describe the code that exercises the functions of the chip but provides human readable function headers. It's usually not ridiculously hard, interpreting things like register bit definitions and timing diagrams. And in the absence of published code, I'd have been on the hook to write it myself anyway. Often, talking to something like an ADC through a SPI port on a microcontroller might be 10 or 20 lines of code.
The link above is a press release, the full list of devices is here:
https://wiki.analog.com/resources/tools-software/linux-drive...
Part numbers prefixed with "LTC" are from Linear Tech, part numbers prefixed with "MAX" are Maxim, part numbers prefixed with "AD" are Analog Devices. Part numbers prefixed with "DS" are from Dallas Semiconductor, which was bought by Maxim a long time ago.
As someone who typically uses these devices in much smaller embedded systems, it's nice to have these hardware abstraction layers listed in one place, instead of having to transcribe it from the datasheet.