@@ -46,8 +46,7 @@ static int ucsi_acpi_dsm(struct ucsi_acpi *ua, int func)
4646 return 0 ;
4747}
4848
49- static int ucsi_acpi_read (struct ucsi * ucsi , unsigned int offset ,
50- void * val , size_t val_len )
49+ static int ucsi_acpi_read_version (struct ucsi * ucsi , u16 * version )
5150{
5251 struct ucsi_acpi * ua = ucsi_get_drvdata (ucsi );
5352 int ret ;
@@ -56,7 +55,35 @@ static int ucsi_acpi_read(struct ucsi *ucsi, unsigned int offset,
5655 if (ret )
5756 return ret ;
5857
59- memcpy (val , ua -> base + offset , val_len );
58+ memcpy (version , ua -> base + UCSI_VERSION , sizeof (* version ));
59+
60+ return 0 ;
61+ }
62+
63+ static int ucsi_acpi_read_cci (struct ucsi * ucsi , u32 * cci )
64+ {
65+ struct ucsi_acpi * ua = ucsi_get_drvdata (ucsi );
66+ int ret ;
67+
68+ ret = ucsi_acpi_dsm (ua , UCSI_DSM_FUNC_READ );
69+ if (ret )
70+ return ret ;
71+
72+ memcpy (cci , ua -> base + UCSI_CCI , sizeof (* cci ));
73+
74+ return 0 ;
75+ }
76+
77+ static int ucsi_acpi_read_message_in (struct ucsi * ucsi , void * val , size_t val_len )
78+ {
79+ struct ucsi_acpi * ua = ucsi_get_drvdata (ucsi );
80+ int ret ;
81+
82+ ret = ucsi_acpi_dsm (ua , UCSI_DSM_FUNC_READ );
83+ if (ret )
84+ return ret ;
85+
86+ memcpy (val , ua -> base + UCSI_MESSAGE_IN , val_len );
6087
6188 return 0 ;
6289}
@@ -99,50 +126,63 @@ static int ucsi_acpi_sync_control(struct ucsi *ucsi, u64 command)
99126}
100127
101128static const struct ucsi_operations ucsi_acpi_ops = {
102- .read = ucsi_acpi_read ,
129+ .read_version = ucsi_acpi_read_version ,
130+ .read_cci = ucsi_acpi_read_cci ,
131+ .read_message_in = ucsi_acpi_read_message_in ,
103132 .sync_control = ucsi_acpi_sync_control ,
104133 .async_control = ucsi_acpi_async_control
105134};
106135
107136static int
108- ucsi_zenbook_read (struct ucsi * ucsi , unsigned int offset , void * val , size_t val_len )
137+ ucsi_zenbook_read_cci (struct ucsi * ucsi , u32 * cci )
109138{
110139 struct ucsi_acpi * ua = ucsi_get_drvdata (ucsi );
111140 int ret ;
112141
113- if (offset == UCSI_VERSION || UCSI_COMMAND (ua -> cmd ) == UCSI_PPM_RESET ) {
142+ if (UCSI_COMMAND (ua -> cmd ) == UCSI_PPM_RESET ) {
114143 ret = ucsi_acpi_dsm (ua , UCSI_DSM_FUNC_READ );
115144 if (ret )
116145 return ret ;
117146 }
118147
119- memcpy (val , ua -> base + offset , val_len );
148+ memcpy (cci , ua -> base + UCSI_CCI , sizeof (* cci ));
149+
150+ return 0 ;
151+ }
152+
153+ static int
154+ ucsi_zenbook_read_message_in (struct ucsi * ucsi , void * val , size_t val_len )
155+ {
156+ struct ucsi_acpi * ua = ucsi_get_drvdata (ucsi );
157+
158+ /* UCSI_MESSAGE_IN is never read for PPM_RESET, return stored data */
159+ memcpy (val , ua -> base + UCSI_MESSAGE_IN , val_len );
120160
121161 return 0 ;
122162}
123163
124164static const struct ucsi_operations ucsi_zenbook_ops = {
125- .read = ucsi_zenbook_read ,
165+ .read_version = ucsi_acpi_read_version ,
166+ .read_cci = ucsi_zenbook_read_cci ,
167+ .read_message_in = ucsi_zenbook_read_message_in ,
126168 .sync_control = ucsi_acpi_sync_control ,
127169 .async_control = ucsi_acpi_async_control
128170};
129171
130- static int ucsi_gram_read (struct ucsi * ucsi , unsigned int offset ,
131- void * val , size_t val_len )
172+ static int ucsi_gram_read_message_in (struct ucsi * ucsi , void * val , size_t val_len )
132173{
133174 u16 bogus_change = UCSI_CONSTAT_POWER_LEVEL_CHANGE |
134175 UCSI_CONSTAT_PDOS_CHANGE ;
135176 struct ucsi_acpi * ua = ucsi_get_drvdata (ucsi );
136177 struct ucsi_connector_status * status ;
137178 int ret ;
138179
139- ret = ucsi_acpi_read (ucsi , offset , val , val_len );
180+ ret = ucsi_acpi_read_message_in (ucsi , val , val_len );
140181 if (ret < 0 )
141182 return ret ;
142183
143184 if (UCSI_COMMAND (ua -> cmd ) == UCSI_GET_CONNECTOR_STATUS &&
144- test_bit (UCSI_ACPI_CHECK_BOGUS_EVENT , & ua -> flags ) &&
145- offset == UCSI_MESSAGE_IN ) {
185+ test_bit (UCSI_ACPI_CHECK_BOGUS_EVENT , & ua -> flags )) {
146186 status = (struct ucsi_connector_status * )val ;
147187
148188 /* Clear the bogus change */
@@ -173,7 +213,9 @@ static int ucsi_gram_sync_control(struct ucsi *ucsi, u64 command)
173213}
174214
175215static const struct ucsi_operations ucsi_gram_ops = {
176- .read = ucsi_gram_read ,
216+ .read_version = ucsi_acpi_read_version ,
217+ .read_cci = ucsi_acpi_read_cci ,
218+ .read_message_in = ucsi_gram_read_message_in ,
177219 .sync_control = ucsi_gram_sync_control ,
178220 .async_control = ucsi_acpi_async_control
179221};
@@ -203,7 +245,7 @@ static void ucsi_acpi_notify(acpi_handle handle, u32 event, void *data)
203245 u32 cci ;
204246 int ret ;
205247
206- ret = ua -> ucsi -> ops -> read (ua -> ucsi , UCSI_CCI , & cci , sizeof ( cci ) );
248+ ret = ua -> ucsi -> ops -> read_cci (ua -> ucsi , & cci );
207249 if (ret )
208250 return ;
209251
0 commit comments