Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 7 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,19 @@
# matrixio-kernel-modules
## matrixio-kernel-modules

MATRIXIO Kernel Modules is the kernel drivers for MATRIX Creator and MATRIX Voice.

## Tested on 6.6.62+rpt-rpi-v7 Kernel
- Compilation OK on Raspberry 3B+


## Warning: Kernel Version
This drivers **only** works with current stock raspbian kernel. To reverting back to current stock Raspbian kernel use:

```
sudo apt-get install --reinstall raspberrypi-bootloader raspberrypi-kernel
```

## Option 1: Package Installation
```
# Add repo and key
curl -L https://apt.matrix.one/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.matrix.one/raspbian $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/matrixlabs.list
```
```
# Update packages and install
sudo apt-get update
sudo apt-get upgrade
```
```
# Reboot in case of Kernel Updates
sudo reboot
```
```
# Installation MATRIX Packages
sudo apt install matrixio-kernel-modules
```
```
# Reboot
sudo reboot
```
## Option 2: Cloning & compiling from sources
## Option 1: Cloning & compiling from sources

### Install Dependencies

Expand Down Expand Up @@ -61,7 +42,7 @@ sudo reboot

### Cloning & Compiling
```
git clone https://github.com/matrix-io/matrixio-kernel-modules
git clone https://github.com/Tvixrevue/matrixio-kernel-modules
cd matrixio-kernel-modules/src
make && make install
```
Expand Down
7 changes: 4 additions & 3 deletions src/matrixio-env.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/iio/iio.h>
#include <linux/iio/iio-opaque.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/platform_device.h>
Expand Down Expand Up @@ -98,12 +99,12 @@ static int matrixio_env_read_raw(struct iio_dev *indio_dev,
struct matrixio_bus *data = iio_priv(indio_dev);
int ret;
struct matrixio_env_data env_data;

mutex_lock(&indio_dev->mlock);
struct iio_dev_opaque *indio_dev_opaque = to_iio_dev_opaque(indio_dev);
mutex_lock(&indio_dev_opaque->mlock);
ret = matrixio_read(data->mio,
MATRIXIO_MCU_BASE + (MATRIXIO_SRAM_OFFSET_ENV >> 1),
sizeof(env_data), &env_data);
mutex_unlock(&indio_dev->mlock);
mutex_unlock(&indio_dev_opaque->mlock);

switch (mask) {
case IIO_CHAN_INFO_RAW:
Expand Down
2 changes: 1 addition & 1 deletion src/matrixio-gpio.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include <linux/bitops.h>
#include <linux/fs.h>
#include <linux/gpio.h>
#include <linux/gpio/driver.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>
Expand Down
13 changes: 7 additions & 6 deletions src/matrixio-imu.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/iio/iio.h>
#include <linux/iio/iio-opaque.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/platform_device.h>
Expand Down Expand Up @@ -116,17 +117,17 @@ static int matrixio_imu_write_raw(struct iio_dev *indio_dev,
struct matrixio_bus *data = iio_priv(indio_dev);
int ret;
int data_write;

struct iio_dev_opaque *indio_dev_opaque = to_iio_dev_opaque(indio_dev);
if (mask == IIO_CHAN_INFO_CALIBBIAS) {

data_write = matrixio_int_plus_micro_to_int(val, val2);
mutex_lock(&indio_dev->mlock);
mutex_lock(&indio_dev_opaque->mlock);
ret = matrixio_write(data->mio,
MATRIXIO_MCU_BASE +
(MATRIXIO_SRAM_OFFSET_IMU >> 1) +
chan->address + MATRIXIO_CALIB_OFFSET,
sizeof(data_write), &data_write);
mutex_unlock(&indio_dev->mlock);
mutex_unlock(&indio_dev_opaque->mlock);
return ret;
}

Expand All @@ -141,7 +142,7 @@ static int matrixio_imu_read_raw(struct iio_dev *indio_dev,
int ret;
int data_read;
int offset;

struct iio_dev_opaque *indio_dev_opaque = to_iio_dev_opaque(indio_dev);
switch (mask) {
case IIO_CHAN_INFO_CALIBBIAS:
offset = chan->address + MATRIXIO_CALIB_OFFSET;
Expand All @@ -153,13 +154,13 @@ static int matrixio_imu_read_raw(struct iio_dev *indio_dev,
return -EINVAL;
}

mutex_lock(&indio_dev->mlock);
mutex_lock(&indio_dev_opaque->mlock);
ret = matrixio_read(data->mio,
MATRIXIO_MCU_BASE +
(MATRIXIO_SRAM_OFFSET_IMU >> 1) + offset,
sizeof(data_read), &data_read);

mutex_unlock(&indio_dev->mlock);
mutex_unlock(&indio_dev_opaque->mlock);

if (ret)
return ret;
Expand Down
6 changes: 3 additions & 3 deletions src/matrixio-playback.c
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ matrixio_playback_pointer(struct snd_soc_component *component, struct snd_pcm_su

static int matrixio_playback_copy(struct snd_soc_component *component, struct snd_pcm_substream *substream,
int channel, snd_pcm_uframes_t pos,
void __user *buf, snd_pcm_uframes_t bytes)
struct iov_iter *iter, snd_pcm_uframes_t bytes)
{
int ret;
unsigned int copied;
Expand All @@ -236,7 +236,7 @@ static int matrixio_playback_copy(struct snd_soc_component *component, struct sn

int frame_count = bytes_to_frames(runtime, bytes);

ret = kfifo_from_user(&pcm_fifo, buf, bytes, &copied);
ret = kfifo_from_user(&pcm_fifo, iter_iov_addr(iter), bytes, &copied);
up(&sem);

return frame_count;
Expand Down Expand Up @@ -332,7 +332,7 @@ static const struct snd_soc_component_driver matrixio_soc_platform = {
.hw_free = matrixio_playback_hw_free,
.prepare = matrixio_playback_prepare,
.pointer = matrixio_playback_pointer,
.copy_user = matrixio_playback_copy,
.copy = matrixio_playback_copy,
.close = matrixio_playback_close,
};

Expand Down
4 changes: 2 additions & 2 deletions src/matrixio-regmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ struct file_operations matrixio_regmap_file_operations = {
.open = matrixio_regmap_open,
.unlocked_ioctl = matrixio_regmap_ioctl};

static int matrixio_regmap_uevent(struct device *d, struct kobj_uevent_env *env)
static int matrixio_regmap_uevent(const struct device *d, struct kobj_uevent_env *env)
{
add_uevent_var(env, "DEVMODE=%#o", 0666);
return 0;
Expand All @@ -88,7 +88,7 @@ static int matrixio_regmap_probe(struct platform_device *pdev)
el->mio = dev_get_drvdata(pdev->dev.parent);

alloc_chrdev_region(&el->devt, 0, 1, "matrixio_regmap");
el->cl = class_create(THIS_MODULE, "matrixio_regmap");
el->cl = class_create("matrixio_regmap");

el->cl->dev_uevent = matrixio_regmap_uevent;

Expand Down