39
39
#include <linux/fs.h>
40
40
#include <linux/ip.h>
41
41
#include <linux/dmapool.h>
42
- #include <linux/gpio.h>
42
+ #include <linux/gpio/consumer .h>
43
43
#include <linux/sched.h>
44
44
#include <linux/time.h>
45
45
#include <linux/wait.h>
61
61
#define IFX_SPI_HEADER_F (-2)
62
62
63
63
#define PO_POST_DELAY 200
64
- #define IFX_MDM_RST_PMU 4
65
64
66
65
/* forward reference */
67
66
static void ifx_spi_handle_srdy (struct ifx_spi_device * ifx_dev );
@@ -81,7 +80,7 @@ static struct notifier_block ifx_modem_reboot_notifier_block = {
81
80
82
81
static int ifx_modem_power_off (struct ifx_spi_device * ifx_dev )
83
82
{
84
- gpio_set_value ( IFX_MDM_RST_PMU , 1 );
83
+ gpiod_set_value ( ifx_dev -> gpio . pmu_reset , 1 );
85
84
msleep (PO_POST_DELAY );
86
85
87
86
return 0 ;
@@ -107,7 +106,7 @@ static int ifx_modem_reboot_callback(struct notifier_block *nfb,
107
106
*/
108
107
static inline void mrdy_set_high (struct ifx_spi_device * ifx )
109
108
{
110
- gpio_set_value (ifx -> gpio .mrdy , 1 );
109
+ gpiod_set_value (ifx -> gpio .mrdy , 1 );
111
110
}
112
111
113
112
/**
@@ -117,7 +116,7 @@ static inline void mrdy_set_high(struct ifx_spi_device *ifx)
117
116
*/
118
117
static inline void mrdy_set_low (struct ifx_spi_device * ifx )
119
118
{
120
- gpio_set_value (ifx -> gpio .mrdy , 0 );
119
+ gpiod_set_value (ifx -> gpio .mrdy , 0 );
121
120
}
122
121
123
122
/**
@@ -244,7 +243,7 @@ static inline void swap_buf_32(unsigned char *buf, int len, void *end)
244
243
*/
245
244
static void mrdy_assert (struct ifx_spi_device * ifx_dev )
246
245
{
247
- int val = gpio_get_value (ifx_dev -> gpio .srdy );
246
+ int val = gpiod_get_value (ifx_dev -> gpio .srdy );
248
247
if (!val ) {
249
248
if (!test_and_set_bit (IFX_SPI_STATE_TIMER_PENDING ,
250
249
& ifx_dev -> flags )) {
@@ -691,7 +690,7 @@ static void ifx_spi_complete(void *ctx)
691
690
clear_bit (IFX_SPI_STATE_IO_IN_PROGRESS , & (ifx_dev -> flags ));
692
691
693
692
queue_length = kfifo_len (& ifx_dev -> tx_fifo );
694
- srdy = gpio_get_value (ifx_dev -> gpio .srdy );
693
+ srdy = gpiod_get_value (ifx_dev -> gpio .srdy );
695
694
if (!srdy )
696
695
ifx_spi_power_state_clear (ifx_dev , IFX_SPI_POWER_SRDY );
697
696
@@ -898,7 +897,7 @@ static irqreturn_t ifx_spi_srdy_interrupt(int irq, void *dev)
898
897
static irqreturn_t ifx_spi_reset_interrupt (int irq , void * dev )
899
898
{
900
899
struct ifx_spi_device * ifx_dev = dev ;
901
- int val = gpio_get_value (ifx_dev -> gpio .reset_out );
900
+ int val = gpiod_get_value (ifx_dev -> gpio .reset_out );
902
901
int solreset = test_bit (MR_START , & ifx_dev -> mdm_reset_state );
903
902
904
903
if (val == 0 ) {
@@ -954,14 +953,14 @@ static int ifx_spi_reset(struct ifx_spi_device *ifx_dev)
954
953
* to reset properly
955
954
*/
956
955
set_bit (MR_START , & ifx_dev -> mdm_reset_state );
957
- gpio_set_value (ifx_dev -> gpio .po , 0 );
958
- gpio_set_value (ifx_dev -> gpio .reset , 0 );
956
+ gpiod_set_value (ifx_dev -> gpio .po , 0 );
957
+ gpiod_set_value (ifx_dev -> gpio .reset , 0 );
959
958
msleep (25 );
960
- gpio_set_value (ifx_dev -> gpio .reset , 1 );
959
+ gpiod_set_value (ifx_dev -> gpio .reset , 1 );
961
960
msleep (1 );
962
- gpio_set_value (ifx_dev -> gpio .po , 1 );
961
+ gpiod_set_value (ifx_dev -> gpio .po , 1 );
963
962
msleep (1 );
964
- gpio_set_value (ifx_dev -> gpio .po , 0 );
963
+ gpiod_set_value (ifx_dev -> gpio .po , 0 );
965
964
ret = wait_event_timeout (ifx_dev -> mdm_reset_wait ,
966
965
test_bit (MR_COMPLETE ,
967
966
& ifx_dev -> mdm_reset_state ),
@@ -1080,107 +1079,68 @@ static int ifx_spi_spi_probe(struct spi_device *spi)
1080
1079
goto error_ret ;
1081
1080
}
1082
1081
1083
- ifx_dev -> gpio .reset = pl_data -> rst_pmu ;
1084
- ifx_dev -> gpio .po = pl_data -> pwr_on ;
1085
- ifx_dev -> gpio .mrdy = pl_data -> mrdy ;
1086
- ifx_dev -> gpio .srdy = pl_data -> srdy ;
1087
- ifx_dev -> gpio .reset_out = pl_data -> rst_out ;
1088
-
1089
- dev_info (dev , "gpios %d, %d, %d, %d, %d" ,
1090
- ifx_dev -> gpio .reset , ifx_dev -> gpio .po , ifx_dev -> gpio .mrdy ,
1091
- ifx_dev -> gpio .srdy , ifx_dev -> gpio .reset_out );
1092
-
1093
- /* Configure gpios */
1094
- ret = gpio_request (ifx_dev -> gpio .reset , "ifxModem" );
1095
- if (ret < 0 ) {
1096
- dev_err (dev , "Unable to allocate GPIO%d (RESET)" ,
1097
- ifx_dev -> gpio .reset );
1082
+ ifx_dev -> gpio .reset = devm_gpiod_get (dev , "reset" , GPIOD_OUT_LOW );
1083
+ if (IS_ERR (ifx_dev -> gpio .reset )) {
1084
+ dev_err (dev , "could not obtain reset GPIO\n" );
1085
+ ret = PTR_ERR (ifx_dev -> gpio .reset );
1098
1086
goto error_ret ;
1099
1087
}
1100
- ret += gpio_direction_output (ifx_dev -> gpio .reset , 0 );
1101
- ret += gpio_export (ifx_dev -> gpio .reset , 1 );
1102
- if (ret ) {
1103
- dev_err (dev , "Unable to configure GPIO%d (RESET)" ,
1104
- ifx_dev -> gpio .reset );
1105
- ret = - EBUSY ;
1106
- goto error_ret2 ;
1107
- }
1108
-
1109
- ret = gpio_request (ifx_dev -> gpio .po , "ifxModem" );
1110
- ret += gpio_direction_output (ifx_dev -> gpio .po , 0 );
1111
- ret += gpio_export (ifx_dev -> gpio .po , 1 );
1112
- if (ret ) {
1113
- dev_err (dev , "Unable to configure GPIO%d (ON)" ,
1114
- ifx_dev -> gpio .po );
1115
- ret = - EBUSY ;
1116
- goto error_ret3 ;
1117
- }
1118
-
1119
- ret = gpio_request (ifx_dev -> gpio .mrdy , "ifxModem" );
1120
- if (ret < 0 ) {
1121
- dev_err (dev , "Unable to allocate GPIO%d (MRDY)" ,
1122
- ifx_dev -> gpio .mrdy );
1123
- goto error_ret3 ;
1124
- }
1125
- ret += gpio_export (ifx_dev -> gpio .mrdy , 1 );
1126
- ret += gpio_direction_output (ifx_dev -> gpio .mrdy , 0 );
1127
- if (ret ) {
1128
- dev_err (dev , "Unable to configure GPIO%d (MRDY)" ,
1129
- ifx_dev -> gpio .mrdy );
1130
- ret = - EBUSY ;
1131
- goto error_ret4 ;
1088
+ gpiod_set_consumer_name (ifx_dev -> gpio .reset , "ifxModem reset" );
1089
+ ifx_dev -> gpio .po = devm_gpiod_get (dev , "power" , GPIOD_OUT_LOW );
1090
+ if (IS_ERR (ifx_dev -> gpio .po )) {
1091
+ dev_err (dev , "could not obtain power GPIO\n" );
1092
+ ret = PTR_ERR (ifx_dev -> gpio .po );
1093
+ goto error_ret ;
1132
1094
}
1133
-
1134
- ret = gpio_request (ifx_dev -> gpio .srdy , "ifxModem" );
1135
- if (ret < 0 ) {
1136
- dev_err (dev , "Unable to allocate GPIO%d (SRDY)" ,
1137
- ifx_dev -> gpio .srdy );
1138
- ret = - EBUSY ;
1139
- goto error_ret4 ;
1095
+ gpiod_set_consumer_name (ifx_dev -> gpio .po , "ifxModem power" );
1096
+ ifx_dev -> gpio .mrdy = devm_gpiod_get (dev , "mrdy" , GPIOD_OUT_LOW );
1097
+ if (IS_ERR (ifx_dev -> gpio .mrdy )) {
1098
+ dev_err (dev , "could not obtain mrdy GPIO\n" );
1099
+ ret = PTR_ERR (ifx_dev -> gpio .mrdy );
1100
+ goto error_ret ;
1140
1101
}
1141
- ret += gpio_export (ifx_dev -> gpio .srdy , 1 );
1142
- ret += gpio_direction_input (ifx_dev -> gpio .srdy );
1143
- if (ret ) {
1144
- dev_err (dev , "Unable to configure GPIO%d (SRDY)" ,
1145
- ifx_dev -> gpio .srdy );
1146
- ret = - EBUSY ;
1147
- goto error_ret5 ;
1102
+ gpiod_set_consumer_name (ifx_dev -> gpio .mrdy , "ifxModem mrdy" );
1103
+ ifx_dev -> gpio .srdy = devm_gpiod_get (dev , "srdy" , GPIOD_IN );
1104
+ if (IS_ERR (ifx_dev -> gpio .srdy )) {
1105
+ dev_err (dev , "could not obtain srdy GPIO\n" );
1106
+ ret = PTR_ERR (ifx_dev -> gpio .srdy );
1107
+ goto error_ret ;
1148
1108
}
1149
-
1150
- ret = gpio_request ( ifx_dev -> gpio .reset_out , "ifxModem" );
1151
- if (ret < 0 ) {
1152
- dev_err (dev , "Unable to allocate GPIO%d (RESET_OUT)" ,
1153
- ifx_dev -> gpio .reset_out );
1154
- goto error_ret5 ;
1109
+ gpiod_set_consumer_name ( ifx_dev -> gpio . srdy , "ifxModem srdy" );
1110
+ ifx_dev -> gpio .reset_out = devm_gpiod_get ( dev , "rst_out" , GPIOD_IN );
1111
+ if (IS_ERR ( ifx_dev -> gpio . reset_out ) ) {
1112
+ dev_err (dev , "could not obtain rst_out GPIO\n" );
1113
+ ret = PTR_ERR ( ifx_dev -> gpio .reset_out );
1114
+ goto error_ret ;
1155
1115
}
1156
- ret += gpio_export (ifx_dev -> gpio .reset_out , 1 );
1157
- ret += gpio_direction_input (ifx_dev -> gpio .reset_out );
1158
- if (ret ) {
1159
- dev_err (dev , "Unable to configure GPIO%d (RESET_OUT)" ,
1160
- ifx_dev -> gpio .reset_out );
1161
- ret = - EBUSY ;
1162
- goto error_ret6 ;
1116
+ gpiod_set_consumer_name (ifx_dev -> gpio .reset_out , "ifxModem reset out" );
1117
+ ifx_dev -> gpio .pmu_reset = devm_gpiod_get (dev , "pmu_reset" , GPIOD_ASIS );
1118
+ if (IS_ERR (ifx_dev -> gpio .pmu_reset )) {
1119
+ dev_err (dev , "could not obtain pmu_reset GPIO\n" );
1120
+ ret = PTR_ERR (ifx_dev -> gpio .pmu_reset );
1121
+ goto error_ret ;
1163
1122
}
1123
+ gpiod_set_consumer_name (ifx_dev -> gpio .pmu_reset , "ifxModem PMU reset" );
1164
1124
1165
- ret = request_irq (gpio_to_irq (ifx_dev -> gpio .reset_out ),
1125
+ ret = request_irq (gpiod_to_irq (ifx_dev -> gpio .reset_out ),
1166
1126
ifx_spi_reset_interrupt ,
1167
1127
IRQF_TRIGGER_RISING |IRQF_TRIGGER_FALLING , DRVNAME ,
1168
1128
ifx_dev );
1169
1129
if (ret ) {
1170
1130
dev_err (dev , "Unable to get irq %x\n" ,
1171
- gpio_to_irq (ifx_dev -> gpio .reset_out ));
1172
- goto error_ret6 ;
1131
+ gpiod_to_irq (ifx_dev -> gpio .reset_out ));
1132
+ goto error_ret ;
1173
1133
}
1174
1134
1175
1135
ret = ifx_spi_reset (ifx_dev );
1176
1136
1177
- ret = request_irq (gpio_to_irq (ifx_dev -> gpio .srdy ),
1137
+ ret = request_irq (gpiod_to_irq (ifx_dev -> gpio .srdy ),
1178
1138
ifx_spi_srdy_interrupt , IRQF_TRIGGER_RISING , DRVNAME ,
1179
1139
ifx_dev );
1180
1140
if (ret ) {
1181
1141
dev_err (dev , "Unable to get irq %x" ,
1182
- gpio_to_irq (ifx_dev -> gpio .srdy ));
1183
- goto error_ret7 ;
1142
+ gpiod_to_irq (ifx_dev -> gpio .srdy ));
1143
+ goto error_ret2 ;
1184
1144
}
1185
1145
1186
1146
/* set pm runtime power state and register with power system */
@@ -1191,7 +1151,7 @@ static int ifx_spi_spi_probe(struct spi_device *spi)
1191
1151
/* no outgoing tty open at this point, this just satisfies the
1192
1152
* modem's read and should reset communication properly
1193
1153
*/
1194
- srdy = gpio_get_value (ifx_dev -> gpio .srdy );
1154
+ srdy = gpiod_get_value (ifx_dev -> gpio .srdy );
1195
1155
1196
1156
if (srdy ) {
1197
1157
mrdy_assert (ifx_dev );
@@ -1200,18 +1160,8 @@ static int ifx_spi_spi_probe(struct spi_device *spi)
1200
1160
mrdy_set_low (ifx_dev );
1201
1161
return 0 ;
1202
1162
1203
- error_ret7 :
1204
- free_irq (gpio_to_irq (ifx_dev -> gpio .reset_out ), ifx_dev );
1205
- error_ret6 :
1206
- gpio_free (ifx_dev -> gpio .srdy );
1207
- error_ret5 :
1208
- gpio_free (ifx_dev -> gpio .mrdy );
1209
- error_ret4 :
1210
- gpio_free (ifx_dev -> gpio .reset );
1211
- error_ret3 :
1212
- gpio_free (ifx_dev -> gpio .po );
1213
1163
error_ret2 :
1214
- gpio_free ( ifx_dev -> gpio .reset_out );
1164
+ free_irq ( gpiod_to_irq ( ifx_dev -> gpio .reset_out ), ifx_dev );
1215
1165
error_ret :
1216
1166
ifx_spi_free_device (ifx_dev );
1217
1167
saved_ifx_dev = NULL ;
@@ -1235,14 +1185,8 @@ static int ifx_spi_spi_remove(struct spi_device *spi)
1235
1185
pm_runtime_disable (& spi -> dev );
1236
1186
1237
1187
/* free irq */
1238
- free_irq (gpio_to_irq (ifx_dev -> gpio .reset_out ), ifx_dev );
1239
- free_irq (gpio_to_irq (ifx_dev -> gpio .srdy ), ifx_dev );
1240
-
1241
- gpio_free (ifx_dev -> gpio .srdy );
1242
- gpio_free (ifx_dev -> gpio .mrdy );
1243
- gpio_free (ifx_dev -> gpio .reset );
1244
- gpio_free (ifx_dev -> gpio .po );
1245
- gpio_free (ifx_dev -> gpio .reset_out );
1188
+ free_irq (gpiod_to_irq (ifx_dev -> gpio .reset_out ), ifx_dev );
1189
+ free_irq (gpiod_to_irq (ifx_dev -> gpio .srdy ), ifx_dev );
1246
1190
1247
1191
/* free allocations */
1248
1192
ifx_spi_free_device (ifx_dev );
0 commit comments