Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A solution for the sixth hw (irq) #25

Open
wants to merge 16 commits into
base: Andrii.Revva
Choose a base branch
from

Conversation

Renalime
Copy link

This is a solution for the sixth homework.
The GPIO pin is hard coded, and is not instantiated in dt. The driver uses deprecated gpio interface (linux/gpio.h).
Other information can be found in commit messages.

Driver consists of the source file, dts overlay and registers description.
When the device is detected, it's initialized with a default configuration,
that can be seen in the source file. It also has a single sysfs entry,
which reads from the device its id, and prints what type of device is
attached, if it's supported.

Signed-off-by: Andrii Revva <[email protected]>
It seems like a redundant thing, because to precicely calculate lux values
from adc0 and adc1 it's beneficial to have floating point arithmetic. So
it would be nice to pass this obligation to user space.
The method to approximately calculate lux values comes from the datasheet
and it is _absolutely_ arcane and obscure.

Signed-off-by: Andrii Revva <[email protected]>
Three additional fields were declared in the tsl2580 device struct
to store previously read values.

Signed-off-by: Andrii Revva <[email protected]>
A mutex is used to make protection. The mutex use is coarse, since
this particular protection isn't really neccessary, because only one
thread is writing data to structure, and other threads wait for completeion.

Signed-off-by: Andrii Revva <[email protected]>
By default, the device can be accessed every second, although it can be
changed with 'rt' attribute in sysfs.

Signed-off-by: Andrii Revva <[email protected]>
Interrupt handles is called only once, because the interrupt must be
reset for the device, and it must be done in non-irq context. It must
be deffered into either tasklet or workqueue.

Signed-off-by: Andrii Revva <[email protected]>
Workqueue is used to deffer interrupt work. It uses the same thread
to access device as sysfs intefaces.

Signed-off-by: Andrii Revva <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant