LINUX.ORG.RU

Помогите найти driver для MTCH6301

 ,


0

2

Доброго времени суток. Какой драйвер в linux подходит для microchip MTCH6301 нужны исходники. И есть ли такой вообще ? На сайте https://www.microchip.com/ не нашел. В ядре тоже не нахожу подобного. это i2c железяка touch, довольно старая datasheet от 2012 должно быть что-то


Ответ на: комментарий от yax123

Это только для поделок ембедеров, а они драйвера пишут сами.

Пиши сам

Разве что если протокол там не сильно навороченный и это нужно только для своего самописного приложения, можно попробовать заюзать напрямую какой-нибудь libi2c/python-smbus из юзерспейса

alx777 ★★
()
Ответ на: комментарий от yax123

Пишу сам, но железка какая-то глючная. Например в документации написано 1 байт это длина, потом данные которые надо считать одной транзакцией. В драйвере делаю так :


devm_request_threaded_irq(&client->dev,
  client->irq,
  NULL, 
  mtch6301_irq_handler,
  IRQF_TRIGGER_RISING | IRQF_ONESHOT,
  MTCH6301_DRIVER_NAME, data); 


static int mtch6301_i2c_read(struct i2c_client *client, u8 *buf, int len)
{
	struct i2c_msg msgs;
		
	msgs.addr = client->addr;
	msgs.flags = I2C_M_RD | I2C_M_RECV_LEN;
	msgs.len = len;
	msgs.buf = buf;
		
	
	int ret;

	ret = i2c_transfer(client->adapter, &msgs,1));
	if (ret != 1) {
		dev_err(&client->dev, "I2C read failed: %d\n", ret);
		return ret < 0 ? ret : -EIO;
	}

	return 0;
}


static irqreturn_t mtch6301_irq_handler(int irq, void *dev_id){
....
packet[33]
mtch6301_i2c_read(client, packet, 32); //если читать так то железо будет тупить будут timeout на i2c_transfer
mtch6301_i2c_read(client, packet, 6); //вот так читать - будет работать - touch посылка 6 байт 
//проблема в том что посылка на жесты или например запрос ID  не 6 байт а 3 и 9 соответственно
//читать 1 байт потом все остальные данные еще больше глюков ошибок и timeout
}

Может подскажите touchpad на которые есть хороший datasheet и можно купить например в chipdip, на который есть driver в linux. Короче рекомендации другого железа ?

ri_mik
() автор топика
Ответ на: комментарий от ri_mik

Насчет тача ничего не подскажу.

Единственный мой опыт эмуляция контроллера резистивного тача на мега8 для видеовкладки журнала вог. Чтобы штатный драйвер работал.

Насчет твоей задачи. Обычно проблема в том, что ты думаешь, что написал код правильно, а по факту это не так. Поэтому я сам себя всегда проверяю средствами объективного контроля (лампочка, кнопка, осцилл, логический анализатор). Если у тебя всего лишь i2c, купи за 3 копейки логический анализатор клон saleae. Он на одной микрухе, до 24МГц. Для работы с последовательными низкоскоростными интерфейсами самое то!

На озоне сейчас можно купить за 406руб.

yax123 ★★★★★
()
Ответ на: комментарий от ri_mik

Глючный может быть не железяка, а i2c контроллер (master). Чтение блока должно аппаратно поддерживаться контроллером, посмотрите в драйвере контроллера, может там какие интерестные комментарии.

и можно купить например в chipdip, на который есть driver в linux

И, при этом i2c?

mky ★★★★★
()

В ядре Linux нет драйвера на mtch6301, так этот сенсорный процессор который подключают к mcu (например stm32) c USB, который говорит что он USB-мышь или Multitouch-тачпад. Таким образом используется стандартный драйвер от usb-hid.

ri_mik
() автор топика
Ответ на: комментарий от ri_mik

Пишу сам, но железка какая-то глючная. Например в документации написано 1 байт это длина, потом данные которые надо считать одной транзакцией.

Бывает, сталкивался как-то с i2c сенсором, который был подключен довольно длинным кабелем к контролеру на плате. В общем толком оно не работало, постоянные глюки из-за наводок. И не заработало пока железячники не сделали редизайн по уму

alx777 ★★
()