149 */
150 (void) ddi_hold_driver(ddi_name_to_major("mc-us3"));
151 (void) ddi_hold_driver(ddi_name_to_major("ssc050"));
152
153 /* Gain access into the ssc050_get_port function */
154 daktari_ssc050_get_port_bit = (int (*) (dev_info_t *, int, int,
155 uint8_t *, int)) modgetsymvalue("ssc050_get_port_bit", 0);
156 if (daktari_ssc050_get_port_bit == NULL) {
157 cmn_err(CE_WARN, "cannot find ssc050_get_port_bit");
158 return;
159 }
160
161 ddi_walk_devs(ddi_root_node(), daktari_dev_search, (void *)&keysw_dip);
162 ASSERT(keysw_dip != NULL);
163
164 /*
165 * prevent detach of i2c-ssc050
166 */
167 e_ddi_hold_devi(keysw_dip);
168
169 keypoll_timeout_hz = drv_usectohz(10 * MICROSEC);
170 keyswitch_poll(keysw_dip);
171 abort_seq_handler = daktari_abort_seq_handler;
172 }
173
174 static int
175 daktari_dev_search(dev_info_t *dip, void *arg)
176 {
177 char *compatible = NULL; /* Search tree for "i2c-ssc050" */
178 int *dev_regs; /* Info about where the device is. */
179 uint_t len;
180 int err;
181
182 if (ddi_prop_lookup_string(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS,
183 "compatible", &compatible) != DDI_PROP_SUCCESS)
184 return (DDI_WALK_CONTINUE);
185
186 if (strcmp(compatible, "i2c-ssc050") == 0) {
187 ddi_prop_free(compatible);
188
189 err = ddi_prop_lookup_int_array(DDI_DEV_T_ANY, dip,
|
149 */
150 (void) ddi_hold_driver(ddi_name_to_major("mc-us3"));
151 (void) ddi_hold_driver(ddi_name_to_major("ssc050"));
152
153 /* Gain access into the ssc050_get_port function */
154 daktari_ssc050_get_port_bit = (int (*) (dev_info_t *, int, int,
155 uint8_t *, int)) modgetsymvalue("ssc050_get_port_bit", 0);
156 if (daktari_ssc050_get_port_bit == NULL) {
157 cmn_err(CE_WARN, "cannot find ssc050_get_port_bit");
158 return;
159 }
160
161 ddi_walk_devs(ddi_root_node(), daktari_dev_search, (void *)&keysw_dip);
162 ASSERT(keysw_dip != NULL);
163
164 /*
165 * prevent detach of i2c-ssc050
166 */
167 e_ddi_hold_devi(keysw_dip);
168
169 keypoll_timeout_hz = drv_sectohz(10);
170 keyswitch_poll(keysw_dip);
171 abort_seq_handler = daktari_abort_seq_handler;
172 }
173
174 static int
175 daktari_dev_search(dev_info_t *dip, void *arg)
176 {
177 char *compatible = NULL; /* Search tree for "i2c-ssc050" */
178 int *dev_regs; /* Info about where the device is. */
179 uint_t len;
180 int err;
181
182 if (ddi_prop_lookup_string(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS,
183 "compatible", &compatible) != DDI_PROP_SUCCESS)
184 return (DDI_WALK_CONTINUE);
185
186 if (strcmp(compatible, "i2c-ssc050") == 0) {
187 ddi_prop_free(compatible);
188
189 err = ddi_prop_lookup_int_array(DDI_DEV_T_ANY, dip,
|