18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Basic framing protocol for STM devices.
48c2ecf20Sopenharmony_ci * Copyright (c) 2018, Intel Corporation.
58c2ecf20Sopenharmony_ci */
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#include <linux/module.h>
88c2ecf20Sopenharmony_ci#include <linux/device.h>
98c2ecf20Sopenharmony_ci#include <linux/stm.h>
108c2ecf20Sopenharmony_ci#include "stm.h"
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistatic ssize_t basic_write(struct stm_data *data, struct stm_output *output,
138c2ecf20Sopenharmony_ci			   unsigned int chan, const char *buf, size_t count)
148c2ecf20Sopenharmony_ci{
158c2ecf20Sopenharmony_ci	unsigned int c = output->channel + chan;
168c2ecf20Sopenharmony_ci	unsigned int m = output->master;
178c2ecf20Sopenharmony_ci	const unsigned char nil = 0;
188c2ecf20Sopenharmony_ci	ssize_t sz;
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci	sz = stm_data_write(data, m, c, true, buf, count);
218c2ecf20Sopenharmony_ci	if (sz > 0)
228c2ecf20Sopenharmony_ci		data->packet(data, m, c, STP_PACKET_FLAG, 0, 0, &nil);
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	return sz;
258c2ecf20Sopenharmony_ci}
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cistatic const struct stm_protocol_driver basic_pdrv = {
288c2ecf20Sopenharmony_ci	.owner	= THIS_MODULE,
298c2ecf20Sopenharmony_ci	.name	= "p_basic",
308c2ecf20Sopenharmony_ci	.write	= basic_write,
318c2ecf20Sopenharmony_ci};
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cistatic int basic_stm_init(void)
348c2ecf20Sopenharmony_ci{
358c2ecf20Sopenharmony_ci	return stm_register_protocol(&basic_pdrv);
368c2ecf20Sopenharmony_ci}
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_cistatic void basic_stm_exit(void)
398c2ecf20Sopenharmony_ci{
408c2ecf20Sopenharmony_ci	stm_unregister_protocol(&basic_pdrv);
418c2ecf20Sopenharmony_ci}
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_cimodule_init(basic_stm_init);
448c2ecf20Sopenharmony_cimodule_exit(basic_stm_exit);
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2");
478c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("Basic STM framing protocol driver");
488c2ecf20Sopenharmony_ciMODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>");
49