1*a02509f3SAlexander Shishkin // SPDX-License-Identifier: GPL-2.0
2*a02509f3SAlexander Shishkin /*
3*a02509f3SAlexander Shishkin * Basic framing protocol for STM devices.
4*a02509f3SAlexander Shishkin * Copyright (c) 2018, Intel Corporation.
5*a02509f3SAlexander Shishkin */
6*a02509f3SAlexander Shishkin
7*a02509f3SAlexander Shishkin #include <linux/module.h>
8*a02509f3SAlexander Shishkin #include <linux/device.h>
9*a02509f3SAlexander Shishkin #include <linux/stm.h>
10*a02509f3SAlexander Shishkin #include "stm.h"
11*a02509f3SAlexander Shishkin
basic_write(struct stm_data * data,struct stm_output * output,unsigned int chan,const char * buf,size_t count)12*a02509f3SAlexander Shishkin static ssize_t basic_write(struct stm_data *data, struct stm_output *output,
13*a02509f3SAlexander Shishkin unsigned int chan, const char *buf, size_t count)
14*a02509f3SAlexander Shishkin {
15*a02509f3SAlexander Shishkin unsigned int c = output->channel + chan;
16*a02509f3SAlexander Shishkin unsigned int m = output->master;
17*a02509f3SAlexander Shishkin const unsigned char nil = 0;
18*a02509f3SAlexander Shishkin ssize_t sz;
19*a02509f3SAlexander Shishkin
20*a02509f3SAlexander Shishkin sz = stm_data_write(data, m, c, true, buf, count);
21*a02509f3SAlexander Shishkin if (sz > 0)
22*a02509f3SAlexander Shishkin data->packet(data, m, c, STP_PACKET_FLAG, 0, 0, &nil);
23*a02509f3SAlexander Shishkin
24*a02509f3SAlexander Shishkin return sz;
25*a02509f3SAlexander Shishkin }
26*a02509f3SAlexander Shishkin
27*a02509f3SAlexander Shishkin static const struct stm_protocol_driver basic_pdrv = {
28*a02509f3SAlexander Shishkin .owner = THIS_MODULE,
29*a02509f3SAlexander Shishkin .name = "p_basic",
30*a02509f3SAlexander Shishkin .write = basic_write,
31*a02509f3SAlexander Shishkin };
32*a02509f3SAlexander Shishkin
basic_stm_init(void)33*a02509f3SAlexander Shishkin static int basic_stm_init(void)
34*a02509f3SAlexander Shishkin {
35*a02509f3SAlexander Shishkin return stm_register_protocol(&basic_pdrv);
36*a02509f3SAlexander Shishkin }
37*a02509f3SAlexander Shishkin
basic_stm_exit(void)38*a02509f3SAlexander Shishkin static void basic_stm_exit(void)
39*a02509f3SAlexander Shishkin {
40*a02509f3SAlexander Shishkin stm_unregister_protocol(&basic_pdrv);
41*a02509f3SAlexander Shishkin }
42*a02509f3SAlexander Shishkin
43*a02509f3SAlexander Shishkin module_init(basic_stm_init);
44*a02509f3SAlexander Shishkin module_exit(basic_stm_exit);
45*a02509f3SAlexander Shishkin
46*a02509f3SAlexander Shishkin MODULE_LICENSE("GPL v2");
47*a02509f3SAlexander Shishkin MODULE_DESCRIPTION("Basic STM framing protocol driver");
48*a02509f3SAlexander Shishkin MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>");
49